In diesem Blog-Beitrag werden sechs der häufig genutzten Frameworks genauer beleuchtet und die Unterschiede herausgefiltert.
Struktureller Aufbau
Überblick
Eines der ersten UI-Komponenten Frameworks, das Ende 2006 für Java EE auf den Markt kam, ist IceFaces. (http://www.icesoft.org)
Kurze Zeit darauf wurde RichFaces von JBoss veröffentlicht, das mittlerweile jedoch sein „End-of-Life“ erreicht hat.
(http://www.richfaces.jboss.org)
BootsFaces basierend auf Bootstrap 3 und der jQuery UI. Seine Vorteile liegen vor allem im Aufbau und Strukturierung der Webseite. (https://www.bootsfaces.net)
OmniFaces richtet seinen Schwerpunkt, nicht auf UI-Komponenten, sondern auf Utility Methoden, die die Funktionen von JSF erweitern. (http://www.omnifaces.org)
PrettyFaces ist eine URL-Rewriting Bibliothek für Java EE, die ein optimiertes URL-Handling und eine verbesserte Navigation anbietet. (http://www.ocpsoft.org/prettyfaces)
IceFaces
Die Open-Source Bibliothek wurde 2006 von IceSoft veröffentlicht und ist damit eines der ältesten UI-Komponenten Frameworks für Java EE. Und zu damaligen Zeiten eine willkommene Ergänzung zu JSF.
IceFaces bietet mit 76 Komponenten eine gute Basis an zahlreichen Verbesserungen gegenüber dem Standard JSF.
Damit war und ist es möglich Ajax Request in speziellen Tags völlig automatisch ablaufen zu lassen. Die Entwickler von IceSoft legten darüber hinaus bereits 2006 Wert auf RIA-Komponenten. „Rich Internet Applications“ sind Seiten, die, anders als statische Seiten, über zahlreiche Interaktionsmöglichkeiten verfügen, dazu zählt zum Beispiel die Verwendung von Drag & Drop, 3D-Effekten, Animationen und vieles mehr. Mit der Nutzung von IceFaces lassen sich diese Funktionen ohne die Verwendung von JavaScript implementieren.
Neben den reinen UI-Komponenten muss man von IceFaces vor allem das transparente Ajax hervorheben. Der Einsatz von Ajax Push ermöglicht der Web-Applikation, Inhalte unabhängig von Client-Requests neu rendern zu lassen.
IceFaces hat mitunter mit Performance Problemen und einem doch teilweise fehlerhaften Code zu kämpfen. Nachdem IceSoft Komponenten von PrimeFaces teilweise kopiert und in ihr Framework aufgenommen hatte kam es zu einem Aufschrei in der Community. In Folge dessen musste sogar die Lizenz auf die Apache-Lizenz geändert werden.
RichFaces
Von JBoss bzw. Exadel entwickelt, war RichFaces nach der Einführung 2007 und auch in den darauffolgenden Jahren sehr beliebt. Jedoch änderte sich dies zu Beginn des letzten Jahrzehntes. Nach dem Aufkommen anderer UI-Frameworks und dem sinkenden Interesse der Webentwickler wurde RichFaces letztendlich im Juni 2016 mit der Version „4.5.13 final“ eingestellt. In der finalen Version sind 62 UI und Utility-Komponenten implementiert. Dabei sind vor allem die „a4j“-Tags, über die Ajax Requests abgesetzt werden können, und ein erweiterte „Queuing-Mechanismus“ zu erwähnen. Mit diesem Mechanismus kann man die Client-Seite bzw. den Server dazu bringen, eine bestimmte Zeitspanne zu warten, um ähnliche Requests gemeinsam zu senden oder Updates an die Seite zurück zu schicken. Auch besitzt RichFaces eine Client-Side-Validation, die ohne den Einsatz von JavaScript funktioniert. Neben einer „poll“-Komponente – der Client fordert kontinuierliche Updates – unterstützt RichFaces auch einen „push“-Mechanismus der über den Java Messaging Service (JMS) automatisch Daten an den Client schickt, ohne dass der Benutzer dies aktiv anfragt.
PrimeFaces
2010 veröffentlichte PrimeTek PrimeFaces: Das relativ junge UI-Framework für Java EE erfreut sich seitdem sehr großer Beliebtheit.
Doch was bietet PrimeFaces alles, um seine beliebte Stellung in der Community zu erklären?
Umfangreicher als bei den meisten Frameworks stellt PrimeFaces eine sehr gute Dokumentation und einen detaillierten Show-Case zur Verfügung. Mit Code-Beispielen der Controller- und View-Schicht sowie einer visuellen Darstellung werden die Komponenten ausführlich vorgestellt.
Mit 179 User Interface- und Utility-Komponenten bietet PrimeFaces die größte Anzahl an Komponenten aller JSF-Erweiterungen. Neben dem ursprünglichen Schwerpunkt der UI-Komponenten fügte PrimeFaces nach und nach auch viele Core-Features hinzu, die teilweise von OmniFaces stammen und PrimeFaces noch breitgefächerter aufstellt. Zu diesen gehören auch Features wie Ajax Core Komponenten mit transparentes Ajax für unter anderem „poll“ und „push“, zahlreiche UIs für Input-Masken, Kalender, Slider und vieles mehr. Erweitert wird das zusätzlich durch eigene Buttons, Panels, Menüs, Charts, Multimedia Features usw. Um die Aufzählung abzurunden, kommen noch ein Mobile UI Kit sowie zahlreiche Themes und eine Search Expression Language dazu. Diese Search EL liefert Annotationen wie @previous, die einzelne Komponenten ID-unabhängig mit einander verbinden kann. Zusammengefasst kann man PrimeFaces im aktuellen Stand als ein sehr umfangreiches Komponenten-Framework bezeichnen, dass durch die Vielzahl an Optionen für die meisten Entwickler zu empfehlen ist.
BootsFaces
BootsFaces basiert auf Bootstrap und der jQuery UI und unterstützt die drei Komponenten-Frameworks PrimeFaces, OmniFaces und AngularFaces.
BootsFaces erweitert die von vielen bekannte Bootstrap Funktionalitäten und fügt diese in JSF Seiten ein. Dabei werden vor allem die verschachtelten und teilweise sehr unübersichtlichen „div-Blöcke“ aufgelöst und in eigene Tags überführt. Somit müssen keine Style-Klassen mehr hinzugefügt werden um z.B. ein Panel zu definieren; dies geschieht bei BootsFaces jetzt mit <b:panel>.
Der von Bootstrap bekannte typische Aufbau von Webseiten ist auch in BootsFaces übernommen. Alle Style-Vorlagen und einige Widgets von Bootstrap und jQuery UI können ebenfalls integriert werden. Die eingeführten Tags haben auch noch weitere Vorteile; so können sie Ziel von Ajax-Updates werden und können Funktionen wie „rendered“ anbieten.
Bootstrap selbst sieht sich als Erweiterung zu den großen und mächtigen Frameworks, zu denen eine Kompatibilität gewährleistet wird.
OmniFaces
OmniFaces, von BalusC und Arjan Tijms entwickelt, richtet sein Hauptaugenmerk rein auf Utility-Komponenten und erweitert lediglich einige UI-Komponenten mit zusätzlichen Funktionen.
Bei den „Enhanced Components“ handelt es sich z.B. um <o:highlight>, dass nicht valide Felder markiert, oder ein Message-Tag, das an mehr als nur ein Input-Field zugewiesen werden kann.
Zu den Utility-Komponenten zählen unter anderem die zahlreichen Konverter und Validationen, sowie ein „Full-Ajax-Exception-Handler“: Dieser kann Exceptiones, die während des asynchronen Requests geworfen werden, an die Oberfläche weitergeben und diese somit wie synchron geworfene Exceptiones darstellen. Mittels des „Combined-Resources-Handler“ werden die vielen CSS und JS Dateien zu jeweils einzelnen zusammengefasst und die Ladezeit der Seite somit verkürzt. Viele der von OmniFaces entwickelten Features im CDI-Bereich wurden sogar von JSF 2.2 übernommen. Dazu zählt unter anderem die optimierte @PreDestory-Annotation. Dieser ruft, anders als bisher, auch nach dem Ablaufen einer Session im ViewScope die annotierte Methode auf.
PrettyFaces
Dass sich die Webseite beim Neuladen, Öffnen von Links, Abschicken von Formularen oder beim Erstellen von Lesezeichen wie vom Benutzer erwartet verhält, ist das Ziel vom Framework PrettyFaces. Um dies zu erreichen, gibt es zahlreiche Utilities, wie eine @URLQueryParameter Annotation, welche sich über das abgeschickte „Form“ die Seite „merkt“, von der man kommt, um im gegeben Fall wieder dorthin zurück navigieren zu können. Dies ist zum Beispiel interessant, wenn man über eine Kategorie in einem Buch-Shop auf ein Buch geklickt hat und von dort wieder zurück zur vorherigen Seite gelangen möchte. In der Entität des Buches lässt sich die Kategorie des Buches nicht ermitteln, da es durchaus mehrere geben kann. Hier hilft PrettyFaces über seine Annotation weiter. Darüber hinaus strukturiert das Framework die URLs klar und biete weitere Funktionen an, wie ein „Redirect-After-Post“ und eine „Rewrite-Engine“. Diese verhindert das mehrfache Abschicken von Formularen durch den Client. Die „Rewrite Engine“ erzeugt Permalinks, die dauerhafte Identifikatoren als URL darstellen und selbst nach dem Verschieben von Seiten weiterhin funktionieren.
Trend
Zusammenfassung
IceFaces | RichFaces | PrimeFaces | BootsFaces | OmniFaces | PrettyFaces | |
Trend | ** | ** | **** | ** | ** | * |
Dokumentation | **** | **** | ***** | **** | ***** | *** |
Komponenten | 76 | 62 | 179 | 68 | 107 | 19 |
Core Features | *** | *** | **** | *** | ***** | **** |
Performance | ** | **** | ***** | **** | ***** | – |
Kompatibilität | * | ** | **** | **** | ***** | ***** |
Schwerpunkte | UI & Utility | UI & Utility | UI & Utility | UI & Seiten-struktur | Utility | URL & Navigation |
* = Mangelhaft, ***** = Exzellent; Eigene Darstellung
Fazit
OmniFaces und PrettyFaces bilden auf der einen Seite eine reine Utility-Bibliothek, während die meisten Frameworks sich eher auf UI-Komponenten konzentrieren. PrettyFaces spezialisiert sich dabei auf die Navigation und das URL-Handling. OmniFaces bietet breitgefächerte Funktionen an.
IceFaces und RichFaces sind zwei relativ alte Frameworks, die mit mehreren Problemen zu kämpfen haben: Beide bieten sowohl im UI als auch im Utility Bereich eher wenige Komponenten an. Darüber hinaus hat RichFaces seinen „End-of-Life“ erreicht und die Performance von IceFaces ist schlecht. BootsFaces hat viele Vorteile beim Erstellen eines Seitenaufbaus, weist aber Schwächen im Komponenten Bereich auf und lässt sich daher aber auch mit PrimeFaces bzw. OmniFaces kombinieren. PrimeFaces dagegen bietet als direkter Konkurrent eine bessere Dokumentation, die meisten Komponenten und eine gute Performance.