prettyfaces: restful urls für jsf

26
Christian Kaltepoth / ingenit GmbH & Co. KG Andy Bosch / Berater und Trainer PrettyFaces: RESTful URLs für JSF

Upload: christian-kaltepoth

Post on 17-May-2015

2.034 views

Category:

Technology


9 download

DESCRIPTION

JSF 2.x hat mit einem verbesserten GET-Support und View-Parametern inzwischen schon einiges zum Thema RESTful zu bieten. Das Open-Source-Projekt PrettyFaces geht noch einen Schritt weiter, in dem es erlaubt, fast beliebige RESTful URLs zu erzeugen. Zudem bietet PrettyFaces noch weitere hilfreiche Goodies. In dieser Session wird auf die Konfiguration und die Verwendung von PrettyFaces im Detail eingegangen und aufgezeigt, wie sich zudem ganz einfach die SEO-Eigenschaften (Search Engine Optimization) der Applikation verbessern lassen.

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