Date post: | 17-May-2015 |
Category: |
Technology |
Upload: | christian-kaltepoth |
View: | 2,034 times |
Download: | 9 times |
Christian Kaltepoth / ingenit GmbH & Co. KGAndy Bosch / Berater und Trainer
PrettyFaces:
RESTful URLs für JSF
Agenda
• Begriffsklärung: RESTful URLs• Was bietet JSF?• Einführung in PrettyFaces• Live-Demonstration• Fazit / Ausblick
RESTful URLs
Was ist das?
Prinzipien für RESTful URLs
http://example.com/products/4554
• Eindeutige Adressierbarkeit• Zustandslosigkeit• GET als bevorzugte Operation• Einfache HTML Links
Warum RESTful URLs?
• Lesbarkeit (Wo bin ich?)• SEO / Keywords in URL• „Vertrauen“• Die URLs sind „schön“
Schön?!?http://www.amazon.de/b/ref=sa_menu_
desk3?ie=UTF8&node=514699031
Schön!http://www.ebay.de/elektronik
„Brauchen wir nicht!
Wir entwickeln Anwendungen für das Intranet!“
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
Was bietet JSF für RESTful URLs?
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
JSF 2.0 / 2.1
• GET-Support:– JSF View Parameter– PreRenderView Event– <h:link> und <h:button>
• Unterstützung von Redirects bei impliziter Navigation
Was bietet PrettyFaces darüber hinaus?
Rewriting
• Beliebige Adressen für JSF Seiten• FacesServlet Mapping irrelevant
http://shop.de/faces/warenkorb.xhtml↓
http://shop.de/warenkorb
Path-Parameter
• Echte Path-Parameter• Integration mit JSF View Parametern
http://shop.de/faces/artikel.xhtml?kategorie=notebooks
↓
http://shop.de/kategorie/notebooks
Page Actions
• Ausführung beim Seitenzugriff• Vorherige Konvertierung und Validierung
http://shop.de/notebooks
Page Action:
Lade Artikel der Kategorie „Notebooks“
Annotations@Named@RequestScoped@URLMapping(pattern="/warenkorb", viewId="/faces/warenkorb.xhtml")public class WarenkorbBean {
@URLAction public void loadData() { … }
}
XML Konfiguration
<prettyconfig xmlns="http://ocpsoft.com/prettyfaces/3.3.0">
<urlmapping id="warenkorb"> <pattern value="/warenkorb" /> <viewid value="/faces/warenkorb.xhtml" /> <action>#{warenkorbBean.loadData}</action> </urlmapping>
</prettyconfig>
• /WEBINF/prettyconfig.xml
Rewrite Engine
• Vergleichbar mit mod_rewrite• Deployment der Regeln mit der Anwendung• Migration „alter URLs“
<prettyconfig xmlns="http://ocpsoft.com/prettyfaces/3.3.0">
<rewrite match="^/kategorie.php\?name=(\\w+)$" substitute="/kategorie/$1" redirect="301" />
</prettyconfig>
Weiteres
• PrettyFaces nicht nur für JSF• Lizenz: Apache 2.0• Integration mit:
– JSF 1.2 / 2.0 / 2.1– CDI– Spring
Neugierig?
Nun folgt eine Demonstration!
https://github.com/chkal/wjax11demo
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!
Fast hätte ich es vergessen:
• Erweiterung durch SPIs:– ConfigurationProvider– ConfigurationPostProcessor– Processor– ELBeanNameResolver– DevelopmentModeDetector– etc.
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/
public Configuration getConfiguration(ServletContext ctx) {
return ConfigurationBuilder.begin() .defineRule() .when(Direction.isInbound().and( Path.matches("/some/{page}/.*/"))) .perform(Forward.to("/new{page}/"));
}
Fragen?
Vielen Dank für die Aufmerksamkeit!
http://ocpsoft.com/prettyfaces/
Christian [email protected] @chkal
Andy [email protected]
@andybosch