Transcript
Page 1: PrettyFaces: RESTful URLs für JSF

Christian Kaltepoth / ingenit GmbH & Co. KGAndy Bosch / Berater und Trainer

PrettyFaces:

RESTful URLs für JSF

Page 2: PrettyFaces: RESTful URLs für JSF

Agenda

• Begriffsklärung: RESTful URLs• Was bietet JSF?• Einführung in PrettyFaces• Live-Demonstration• Fazit / Ausblick

Page 3: PrettyFaces: RESTful URLs für JSF

RESTful URLs

Was ist das?

Page 4: PrettyFaces: RESTful URLs für JSF

Prinzipien für RESTful URLs

http://example.com/products/4554

• Eindeutige Adressierbarkeit• Zustandslosigkeit• GET als bevorzugte Operation• Einfache HTML Links

Page 5: PrettyFaces: RESTful URLs für JSF

Warum RESTful URLs?

• Lesbarkeit (Wo bin ich?)• SEO / Keywords in URL• „Vertrauen“• Die URLs sind „schön“

Page 6: PrettyFaces: RESTful URLs für JSF

Schön?!?http://www.amazon.de/b/ref=sa_menu_

desk3?ie=UTF8&node=514699031

Schön!http://www.ebay.de/elektronik

Page 7: PrettyFaces: RESTful URLs für JSF

„Brauchen wir nicht!

Wir entwickeln Anwendungen für das Intranet!“

Page 8: PrettyFaces: RESTful URLs für JSF

Warum RESTful URLs?

• Post-Redirect-Get (PRG) Pattern:– Auf ein POST folgt ein Redirect– Vermeidung von Form Resubmissions– Besseres Verhalten bei Back-Button

Nutzung oder Reload der Seite

• Optimale Bedienbarkeit– Bookmarks / „In neuem Tab öffnen“

• Verknüpfungen zwischen Anwendungen

Page 9: PrettyFaces: RESTful URLs für JSF

Was bietet JSF für RESTful URLs?

Page 10: PrettyFaces: RESTful URLs für JSF

JSF 1.2 und älter

• Navigationsregeln in faces-config.xml• Kein echter GET-Support• Query-Parameter nur mit Umwegen• Darum viele Postbacks• „Vorherige Seite“ in Adresszeile

Page 11: PrettyFaces: RESTful URLs für JSF

JSF 2.0 / 2.1

• GET-Support:– JSF View Parameter– PreRenderView Event– <h:link> und <h:button>

• Unterstützung von Redirects bei impliziter Navigation

Page 12: PrettyFaces: RESTful URLs für JSF

Was bietet PrettyFaces darüber hinaus?

Page 13: PrettyFaces: RESTful URLs für JSF

Rewriting

• Beliebige Adressen für JSF Seiten• FacesServlet Mapping irrelevant

http://shop.de/faces/warenkorb.xhtml↓

http://shop.de/warenkorb

Page 14: PrettyFaces: RESTful URLs für JSF

Path-Parameter

• Echte Path-Parameter• Integration mit JSF View Parametern

http://shop.de/faces/artikel.xhtml?kategorie=notebooks

http://shop.de/kategorie/notebooks

Page 15: PrettyFaces: RESTful URLs für JSF

Page Actions

• Ausführung beim Seitenzugriff• Vorherige Konvertierung und Validierung

http://shop.de/notebooks

Page Action:

Lade Artikel der Kategorie „Notebooks“

Page 16: PrettyFaces: RESTful URLs für JSF

Annotations@Named@RequestScoped@URLMapping(pattern="/warenkorb",            viewId="/faces/warenkorb.xhtml")public class WarenkorbBean {

  @URLAction  public void loadData() {    …  }

}

Page 17: PrettyFaces: RESTful URLs für JSF

XML Konfiguration

<pretty­config xmlns="http://ocpsoft.com/prettyfaces/3.3.0">

   <url­mapping id="warenkorb">      <pattern value="/warenkorb" />      <view­id value="/faces/warenkorb.xhtml" />      <action>#{warenkorbBean.loadData}</action>   </url­mapping>

</pretty­config>

• /WEB­INF/pretty­config.xml

Page 18: PrettyFaces: RESTful URLs für JSF

Rewrite Engine

• Vergleichbar mit mod_rewrite• Deployment der Regeln mit der Anwendung• Migration „alter URLs“

<pretty­config xmlns="http://ocpsoft.com/prettyfaces/3.3.0">

    <rewrite match="^/kategorie.php\?name=(\\w+)$"             substitute="/kategorie/$1" redirect="301" />

</pretty­config>

Page 19: PrettyFaces: RESTful URLs für JSF

Weiteres

• PrettyFaces nicht nur für JSF• Lizenz: Apache 2.0• Integration mit:

– JSF 1.2 / 2.0 / 2.1– CDI– Spring

Page 20: PrettyFaces: RESTful URLs für JSF

Neugierig?

Nun folgt eine Demonstration!

https://github.com/chkal/wjax11­demo

Page 21: PrettyFaces: RESTful URLs für JSF

PrettyFaces…

• macht Ihre Applikation „schöner“• ist leicht zu integrieren/konfigurieren• vereinfacht Entwicklung und

Anwendung

PrettyFaces ist eine sinnvolle Ergänzung für jedes JSF Projekt!

Page 22: PrettyFaces: RESTful URLs für JSF

Fast hätte ich es vergessen:

• Erweiterung durch SPIs:– ConfigurationProvider– ConfigurationPostProcessor– Processor– ELBeanNameResolver– DevelopmentModeDetector– etc.

Page 23: PrettyFaces: RESTful URLs für JSF

Was bringt die Zukunft?

• Fokus liegt auf PrettyFaces 4.0• Basierung auf Rewrite:

– Neuimplementierung der Kernfunktionen als dediziertes Projekt

– Unabhängig von JSF einsetzbar– Konfiguration durch „Fluent API“

 → http://ocpsoft.com/rewrite/

Page 24: PrettyFaces: RESTful URLs für JSF

public Configuration getConfiguration(ServletContext ctx) {

    return ConfigurationBuilder.begin()             .defineRule()             .when(Direction.isInbound().and(                        Path.matches("/some/{page}/.*/")))             .perform(Forward.to("/new­{page}/"));

}

Page 25: PrettyFaces: RESTful URLs für JSF

Fragen?

Page 26: PrettyFaces: RESTful URLs für JSF

Vielen Dank für die Aufmerksamkeit!

http://ocpsoft.com/prettyfaces/

Christian [email protected] @chkal

Andy [email protected]

@andybosch


Top Related