Diese JSF-Erweiterung ermöglicht es, einfache Javascript und JQuery Komponenten JSF-Konform zu implementieren. JSF-JQuery enthält zwar einige fertig einsatzfähige Komponenten, versteht sich allerdings vorwiegend als API zum Implementieren eigener Komponenten.
Zusammenfassung#
Der Vorteil von JSF besteht in der Möglichkeit, mit XHTML arbeiten zu können und die Web-Seite hochgradig in Komponenten strukturieren zu können. Die Anbindung an Controller durch EL-Expressions erlaubt einfache Interaktionen mit Java-Code.Der Nachteil von JSF besteht jedoch in einem Aufwendigen Rekonstruieren der gesamten Seitenstruktur. Gerade bei komplexen Web-Seiten führt dies zu einer immensen Rechenzeit, sowieso hohem Speicherverbrauch.
Reine Javascript-Komponenten haben den Vorteil, dass die Elemente auf der Web-Seite sehr unabhängig voneinander agieren können. Änderungen, Server-Requests und andere Aktionen sind daher sehr leichtgewichtig. Allerdings liefert JQuery und andere Javascript-Bibliotheken aufgrund ihrer Beschaffenheit, kein Mittel um den Aufbau der Web-Seite zu strukturieren. Javascript-Bibliotheken werden daher selten im Business-Bereich eingesetzt.
JSF-JQuery kombiniert nun die Vorteile beider Welten:
- Strukturieren durch Komponenten, XHTML und EL-Binding
- Leichtgewichtige Kommunikation zwischen Browser und Server
Hintergrund#
JSF-JQuery implementiert die JSF Ressource-API, um die AJAX- bzw. JSON-Requests von JQuery- und anderen Javascript-Komponenten entgegenzunehmen. JSF-JQuery stellt den FacesContext und einen Mini-Lifecycle zur Verfügung, sodass mit EL-Expressions weitestgehend wie gewohnt gearbeitet werden kann.Enthaltene Komponenten#
Einige grundlegende Komponenten sind bereits enthalten. Diese können als Beispiel für das Implementieren weiterer Komponenten dienen.JQuery-AJAX#
Der Tag <j:ajax> stellt das Gegenstück zu <f:ajax> oder <p:ajax> von Primefaces dar.API#
Die abstrakte Klasse JQueryComponent baut direkt auf die JSF-Klasse UIComponentBase auf und stellt die Grundlage zum Implementieren von JQuery- und anderer Javascript-Komponenten dar.<c:forEach begin="1" end="3" var="index"> <p:commandButton id="index-#{index}" value="Index Button #{index}" ajax="false"> <j:ajax listener="#{jqueryController.indexAction(index)}" onsuccess="console.log(response);"/> </p:commandButton> </c:forEach>
Das Beispiel erzeugt 3 Knöpfe durch einen For-Each-Loop und ruft die Action-Methode eines Controllers auf. Zusätzlich wird die Index-Variable als Parameter übergeben.