Suche
Java Server Faces

Das ist neu in JSF 2.3

Josh Juneau

© Shutterstocl / Ollyy

Diese Woche kam der 2.3-Release von JSF. Auch wenn es die Java Server Faces schon eine Ewigkeit gibt, liegen sie der Community noch immer am Herzen, erklärt JCP-Mitglied Josh Juneau. Er gibt einen Einblick in den Stand der Dinge bei JSF und die Neuheiten von JSF 2.3, das auch ein Teil von Java EE 8 sein wird.

Java Server Faces (JSF) ist eines der am meisten genutzten Frameworks für die Entwicklung von Webanwendungen auf der Java-EE-Plattform. 2002 eingeführt, lieferte das Framework einen anderen Ansatz Webanwendungen zu bauen, indem es Entwicklern erlaubte, Web Views mit Komponenten zu konstruieren anstatt alles von Grund auf neu zu bauen. Komponenten ermöglichen es Entwicklern, sich mehr auf die Business-Logik einer Anwendung zu fokussieren und weniger Zeit damit zu verbringen Page Actions und Styling zu entwickeln, da JavaScript und CSS wegabstrahiert werden.

Was ist neu?

Über die Jahre wurde JSF immer weiterentwickelt, um das Arbeiten mit dem Framework produktiver zu machen. Außerdem war sein Ziel, immer relevant zu bleiben, indem es neue Webtechnologien einführte. Facelets wurden ein Kernaspekt des Frameworks. Sie erlauben es Entwicklern, Templates zu erstellen, die einfach für alle Views einer Applikation angewendet werden können. Flows wurden eingeführt. Sie ermöglichen es, für ein detaillierteres Session-Management den State über mehrere spezifische Views mitzunehmen. Änderungen wurden vorgenommen, um für Komponenten und Views bessere Client- und Server-seitige Interoperabilität über AJAX zu ermöglichen. Dies sind bloß einige wenige Verbesserungen, die dabei geholfen haben das JSF Framework zu dem zu machen, was es heute ist.

Die neueste Iteration von JSF ist die Version 2.3. Der Fokus des Release liegt auf Anpassungen an Java SE 8 und CDI. Auch eine kleine Sammlung an neuen Features ist dabei, die auf Anfrage aus der Community basieren. Mit dieser Version ist JSF auf Augenhöhe mit Java 8 und anderen modernen Web-Frameworks.

Contexts and Dependency Injection (CDI)

Vielleicht eines der am meisten gewünschten Erweiterungen von JSF 2.3 sind die bei der Nutzung von CDI. JSF 2.3 bietet eine Reihe an Verbesserungen der Produktivität, da viele JSF-Artefakte nun einfach in Java-Klassen und EL-Ausdrücke injiziert werden können. Jahrelang war eine der Achillesfersen von JSF die Anforderung, statische Entry-Methoden und Chaining nutzen zu müssen, um mehrere Artefakte zu erhalten, wie FacesContext, RequestMap oder FlowMap. Diese Artefakte können nun einfach in Klassen injiziert werden anstatt sie zu instantiieren.

FacesContext facesContext = FacesContext.getCurrentInstance();

In JSF 2.3 können wir einfach das Folgende machen:

@Inject
FacesContext facesContext;

Wenn man das Ganze in einem EL-Ausdruck in einer JSF View nutzen möchte, könnte man das so machen:

#{facesContext}

Es gibt mehrere Artefakte, die einen CDI Qualifier brauchen. Z. B. kann FlowMap wie folgt injiziert werden:

@Inject
@FlowMap
private Map<Object, Object> flowMap;

Eines der nützlichsten Features von JSF 2.3 ist das einfache Entwickeln von Converters, Validators und Behaviors. In JSF 2.3 ist es nun möglich, CDI-Artefakte in diese zu injizieren, was sie noch einfacher macht. Das so genannte JSF Managed Bean Scoping hat in der vergangenen Zeit für einiges an Verwirrung gesorgt, weil es möglich war, sowohl Managed-Bean-Annotationen als auch CDI für Scoping zu nutzen. Mit dem Release von 2.3 werden Managed Beans deprecatet, da CDI nun der bevorzugte Ansatz ist. Dies sollte dabei helfen, Entwickler davor zu bewahren, Fehler zu machen, wenn sie Managed Beans und CDI-Scope-Annotationen vermischen, weil dies sich nun mal nicht gut vertragen. So wird auch die @ManagedProperty-Annotation deprecatet. Eine aktualisierte @ManagedProperty-Annotation wird mit dem Release eingeführt. Sie bietet aber dieselbe Funktionalität wie bisher.

@Inject
@ManagedProperty (“#{bean.property}”)
private String stringProperty;

Validierung und Conversions

Mit dem Release kommen einige nützliche Verbesserungen für Validierung und Conversions, inklusive besserer Anpassung an Java SE 8 und die Fähigkeit komplette Beans zu validieren. Bean-Validierung auf Klassen-Level ist mit dem neuen <f:validateWholeBean>-Tag möglich. Wenn dieses Tag in eine View integriert und mindestens eine Input-Komponente mit einer Bean-Validierungs-Gruppe markiert wird, lässt sich die komplette Bean validieren. Das ermöglicht neue Validierungsmöglichkeiten wie felderübergreifende Validierung.

Seitdem Java SE 8 releast wurde, nutzt ein großer Teil der Java-Welt das neue Date-Time API. Die Java-EE-Welt musste schwierige Workarounds nutzen, um dieses API funktionstüchtig zu bekommen. Das JSF Release 2.3 erweitert das <f:convertDateTime>-Conversion-Tag, um die neuen Date-Time-Typen zu unterstützen. Um die java.time.LocalDate-Klasse zu nutzen, kann die View wie folgt aussehen:

&amp;lt;h:outputText value="#{jobController.selected.workDate}"&amp;gt;
&amp;lt;f:convertDateTime type="localDate" pattern="MM/dd/yyyy"/&amp;gt;
&amp;lt;/h:outputText&amp;gt;

<f:convertDateTime> wurde erweitert um die folgenden Date-Time-Typen zu unterstützen: LocalDate, LocalTime, LocalDateTime, OffsetTime, OffsetDateTime, und ZonedDateTime.

Komponenten und APIs

Seit der Geburt von JSF gab es einige Nuancen in den verschiedenen Komponenten und APIs, welche die Entwicklung erschwert haben. Mit dem Ziel einige dieser Hindernisse zu beseitigen, wurden grundlegende Komponenten und APIs verbessert. Z. B. wurden UIDate und UIRepeat erweitert, damit diese Map– und Iterable-Interfaces unterstützen, ebenso wie benutzerdefinierte Typen. Diese Erweiterungen ermöglichen es, java.util.Iterable-Typen, Maps, und benutzerdefinierte Typen in DataTables und mit dem ui:repeat-Tag  zu unterstützen.

&amp;lt;h:dataTable var="mapEntry" value="#{jobController.jobMap}"&amp;gt;
&amp;lt;h:column value="#{mapEntry.key}"/&amp;gt;
&amp;lt;h:column value="#{mapEntry.value}"/&amp;gt;
&amp;lt;/h:dataTable&amp;gt;

Es gibt einige nützliche Erweiterungen, wie die Fähigkeit mit dem neuen <f:importConstants>-Tag Konstanten in EL zu nutzen. Jahrelang fehlten JSF ein paar grundlegende Features, wie die Fähigkeit einen Radio-Button irgendwo in einer View zu platzieren. Der 2.3-Release verringert die Anzahl der begehrten Features, indem es Folgendes mitbringt:

  • Stand-alone-Radio-Button mit dem Gruppenattribut auf <h:selectOneRadio>.
  • styleClass-Attribut auf <h:column> für erweiterten Style Support
  • rowClass-Attribut auf <h:dataTable> für erweiterten Style Support
  • Automatische Collection Conversion für das <h:selectManyMenu>-Tag

Fazit

Das JSF-Release bietet einige Erweiterungen und neue Features, die das Framework einfacher und flexibler machen. Oracle und die Community haben sich zusammengetan und dieses Release größer gemacht als ursprünglich geplant. Viele der eingebauten Features wurden von der Community erbeten. Ein großer Teil der Arbeit wurde von Communitiy-Mitgliedern der JSR-372-Expertengruppe erledigt.

Dieser Artikel hat nur ein paar der neuen Features angesprochen. Aber es gibt noch einige mehr. Für eine komplette Liste, empfehle ich Arjan Tjims‘ Blog, der eine tolle Zusammenfassung der Features enthält.

Verwandte Themen:

Geschrieben von
Josh Juneau
Josh Juneau
Josh Juneau is an Application Developer/System Analyst at Fermilab. Application development technologies include Java SE, Java EE, PL/SQL, Python/Jython, Groovy, and Objective-C. His specialties are: Application development for desktop, enterprise, and web applications. Database application development. Scripting via several languages. Database creation, management, and development.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.