JSF 2.0 Nachteile? Ehrlich gesagt, abgesehen von der relativ steilen Lernkurve, wenn Sie keine soliden Hintergrundkenntnisse über die grundlegende Webentwicklung (HTML / CSS / JS, Server- gegenüber Client-Seite usw.) und die grundlegende Java-Servlet-API (Anforderung / Antwort / Sitzung) haben , Weiterleitung / Weiterleitung usw.) fallen keine ernsthaften Nachteile ein. JSF muss in seiner aktuellen Version immer noch das negative Image beseitigen, das es in den frühen Jahren gewonnen hat, in denen es mehrere schwerwiegende Nachteile gab.
JSF 1.0 (März 2004)
Dies war die erste Veröffentlichung. Es war voller Fehler sowohl im Kern- als auch im Leistungsbereich, über die Sie nichts wissen möchten. Ihre Webanwendung funktionierte nicht immer so, wie Sie es intuitiv erwartet hatten. Sie als Entwickler würden weinend davonlaufen.
JSF 1.1 (Mai 2004)
Dies war die Bugfix-Version. Die Leistung wurde noch nicht wesentlich verbessert. Es gab auch einen großen Nachteil: Sie können HTML nicht fehlerfrei in die JSF-Seite einbinden. Alle einfachen Vanille-HTML-Dateien werden vor dem JSF-Komponentenbaum gerendert . Sie müssen alle einfachen Vanillen in <f:verbatim>
Tags einschließen, damit sie in den JSF-Komponentenbaum aufgenommen werden. Obwohl dies der Spezifikation entsprach, wurde dies vielfach kritisiert. Siehe auch ua JSF / Facelets: Warum ist es keine gute Idee, JSF / Facelets mit HTML-Tags zu mischen?
JSF 1.2 (Mai 2006)
Dies war die erste Veröffentlichung des neuen JSF-Entwicklungsteams unter der Leitung von Ryan Lubke. Das neue Team hat großartige Arbeit geleistet. Es gab auch Änderungen in der Spezifikation. Die wichtigste Änderung war die Verbesserung der Ansichtsbehandlung. Dadurch wurde JSF nicht nur vollständig von JSP getrennt, sodass eine andere Ansichtstechnologie als JSP verwendet werden konnte, sondern Entwickler konnten auch einfaches Vanille-HTML in die JSF-Seite einbinden, ohne sich mit <f:verbatim>
Tags herumschlagen zu müssen . Ein weiterer Schwerpunkt des neuen Teams war die Verbesserung der Leistung. Während der Lebensdauer der Sun JSF-Referenzimplementierung 1.2 (die seit Build 1.2_08 um 2008 den Codenamen Mojarra trug) wurde praktisch jeder Build mit (größeren) Leistungsverbesserungen neben den üblichen (kleinen) Bugfixes ausgeliefert.
Der einzige schwerwiegende Nachteil von JSF 1.x (einschließlich 1.2) ist das Fehlen eines Bereichs zwischen dem Anforderungs- und dem Sitzungsbereich , dem sogenannten Konversationsbereich . Dies zwang Entwickler dazu, sich mit versteckten Eingabeelementen, unnötigen DB-Abfragen und / oder Missbrauch des Sitzungsbereichs zu beschäftigen, wenn die ursprünglichen Modelldaten in der nachfolgenden Anforderung beibehalten werden sollen, um Validierungen, Konvertierungen, Modelländerungen und Aktionsaufrufe erfolgreich zu verarbeiten komplexe Webanwendungen. Der Schmerz könnte gelindert werden, indem eine Bibliothek eines Drittanbieters verwendet wird, die die erforderlichen Daten in der nachfolgenden Anforderung wie MyFaces Tomahawk- <t:saveState>
Komponente, JBoss Seam- Konversationsumfang und MyFaces Orchestra speichert Gesprächsrahmen.
Ein weiterer Nachteil für HTML / CSS-Puristen besteht darin, dass JSF den Doppelpunkt :
als ID-Trennzeichen verwendet, um die Eindeutigkeit des HTML-Elements id
in der generierten HTML-Ausgabe sicherzustellen , insbesondere wenn eine Komponente in der Ansicht mehrmals verwendet wird (Vorlagen, iterierende Komponenten usw.). . Da dies ein unzulässiges Zeichen in CSS-Bezeichnern ist, müssten Sie das verwenden \
, um den Doppelpunkt in CSS-Selektoren zu umgehen, was zu hässlichen und seltsam aussehenden Selektoren wie #formId\:fieldId {}
oder gerade führt #formId\3A fieldId {}
. Siehe auch Verwendung der von JSF generierten HTML-Element-ID mit Doppelpunkt ":" in CSS-Selektoren. Wenn Sie jedoch kein Purist sind, lesen Sie auch Standardmäßig generiert JSF unbrauchbare IDs, die nicht mit CSS-Teilen von Webstandards kompatibel sind .
Außerdem wurde JSF 1.x nicht sofort mit Ajax-Funktionen ausgeliefert. Kein wirklicher technischer Nachteil, aber aufgrund des Web 2.0-Hype in dieser Zeit wurde es zu einem funktionalen Nachteil. Exadel war früh dran , Ajax4jsf einzuführen, das im Laufe der Jahre gründlich entwickelt wurde und zum Kernbestandteil der JBoss RichFaces- Komponentenbibliothek wurde. Weitere Komponentenbibliotheken wurden ebenfalls mit integrierten Ajax-Funktionen ausgeliefert, wobei ICEfaces bekannt ist .
Ungefähr zur Hälfte der Lebensdauer von JSF 1.2 wurde eine neue XML-basierte Ansichtstechnologie eingeführt: Facelets . Dies bot enorme Vorteile gegenüber JSP, insbesondere im Bereich des Templating.
JSF 2.0 (Juni 2009)
Dies war die zweite Hauptversion mit Ajax als Schlagwort. Es gab viele technische und funktionale Änderungen. JSP wird durch Facelets als Standardansichtstechnologie ersetzt, und Facelets wurde um Funktionen zum Erstellen benutzerdefinierter Komponenten mit reinem XML (den sogenannten Composite-Komponenten ) erweitert. Siehe auch Warum werden Facelets ab JSF2.0 als Ansichtsdefinitionssprache JSP vorgezogen?
Ajax-Kräfte wurden im Geschmack der <f:ajax>
Komponente eingeführt, die viele Ähnlichkeiten mit Ajax4jsf aufweist. Anmerkungen und Verbesserungen bei der Konvention über die Konfiguration wurden eingeführt, um die ausführliche faces-config.xml
Datei so weit wie möglich zu beenden . Außerdem wurde das Standard-Trennzeichen für die ID des Namenscontainers :
konfigurierbar, sodass HTML / CSS-Puristen erleichtert atmen konnten. Alles , was Sie tun müssen , ist es so zu definieren , init-param
in web.xml
mit dem Namen javax.faces.SEPARATOR_CHAR
und sicherzustellen , dass Sie nicht dem Charakter selbst überall in Client - IDs verwenden, wie zum Beispiel -
.
Zu guter Letzt wurde ein neuer Bereich eingeführt, der Ansichtsbereich . Es beseitigte einen weiteren großen Nachteil von JSF 1.x, wie zuvor beschrieben. Sie deklarieren einfach die Bean @ViewScoped
, um den Konversationsbereich zu aktivieren, ohne alle Möglichkeiten zu beeinträchtigen, die Daten in nachfolgenden (Konversations-) Anforderungen beizubehalten. Eine @ViewScoped
Bean lebt so lange, wie Sie sie anschließend senden und zu derselben Ansicht navigieren (unabhängig von der geöffneten Registerkarte / dem geöffneten Browserfenster!), Entweder synchron oder asynchron (Ajax). Siehe auch Unterschied zwischen Ansichts- und Anforderungsbereich in verwalteten Beans und Wie wählt man den richtigen Bean-Bereich aus?
Obwohl praktisch alle Nachteile von JSF 1.x beseitigt wurden, gibt es JSF 2.0-spezifische Fehler, die zu einem Showstopper werden könnten. Das @ViewScoped
schlägt bei Tag-Handlern aufgrund eines Hühnerei-Problems beim teilweisen Speichern des Zustands fehl . Dies ist in JSF 2.2 behoben und in Mojarra 2.1.18 zurückportiert. Auch das Übergeben von benutzerdefinierten Attributen wie HTML5data-xxx
wird nicht unterstützt. Dies wird in JSF 2.2 durch die neue Funktion für Passthrough-Elemente / Attribute behoben. Darüber hinaus hat die JSF-Implementierung Mojarra ihre eigenen Probleme . Relativ viele von ihnen hängen mit dem manchmal unintuitiven Verhalten von<ui:repeat>
, der neuen Implementierung zum Speichern von Teilzuständen und dem schlecht implementierten Flash-Bereich zusammen . Die meisten davon sind in einer Mojarra 2.2.x-Version behoben.
Ungefähr zur Zeit von JSF 2.0 wurde PrimeFaces eingeführt, basierend auf jQuery und jQuery UI. Es wurde die beliebteste JSF-Komponentenbibliothek.
JSF 2.2 (Mai 2013)
Mit der Einführung von JSF 2.2 wurde HTML5 als Schlagwort verwendet, obwohl dies technisch nur in allen älteren JSF-Versionen unterstützt wurde. Siehe auch Javaserver Faces 2.2 und HTML5 - Unterstützung, warum ist noch XHTML verwendet wird . Die wichtigste neue Funktion von JSF 2.2 ist die Unterstützung benutzerdefinierter Komponentenattribute, wodurch sich eine Vielzahl von Möglichkeiten eröffnet, z. B. benutzerdefinierte tabellenlose Optionsfeldgruppen .
Abgesehen von implementierungsspezifischen Fehlern und einigen "nervigen Kleinigkeiten" wie der Unfähigkeit, einen EJB in einen Validator / Konverter einzufügen (bereits in JSF 2.3 behoben), gibt es in der JSF 2.2-Spezifikation keine wirklich großen Nachteile.
Komponentenbasierte MVC vs Anforderungsbasierte MVC
Einige mögen sich dafür entscheiden, dass der Hauptnachteil von JSF darin besteht, dass es nur sehr wenig feinkörnige Kontrolle über das generierte HTML / CSS / JS ermöglicht. Das ist nicht JSFs eigenes, nur weil es ein komponentenbasiertes MVC-Framework ist, kein anforderungs- (aktions-) MVC-Framework. Wenn ein hohes Maß an Kontrolle über HTML / CSS / JS Ihre Hauptanforderung ist, wenn Sie ein MVC-Framework in Betracht ziehen, sollten Sie sich bereits nicht mit einem komponentenbasierten MVC-Framework befassen, sondern mit einem anforderungsbasierten MVC-Framework wie Spring MVC . Sie müssen nur berücksichtigen, dass Sie das gesamte HTML / CSS / JS-Boilerplate selbst schreiben müssen. Siehe auch Unterschied zwischen Anforderungs-MVC und Komponenten-MVC .
Siehe auch: