webentwicklung-frage-antwort-db.com.de

Was sind die Hauptnachteile von Java Server Faces 2.0?

Gestern habe ich eine Präsentation auf Java Server Faces 2.0 gesehen, die wirklich beeindruckend ausgesehen hat, obwohl ich derzeit ein glücklicher ASP.NET MVC/jQuery-Entwickler bin AJAX-fähige UI-Komponenten, die die Entwicklung vor allem auf AJAX-lastigen Sites deutlich beschleunigen als mit ASP.NET MVC.

Da die Präsentation nur die Vorteile von JSF hervorhob, würde ich gerne auch von der anderen Seite hören.

Meine Fragen sind also:

  • Was sind die Hauptnachteile von Java Server Faces 2.0?
  • Was könnte einen JSF-Entwickler veranlassen, ASP.NET MVC anstelle von JSF zu verwenden?
230
Adrian Grigore

JSF 2.0 Nachteile? Mal ganz ehrlich, abgesehen von der relativ steilen Lernkurve, wenn Sie kein solides Hintergrundwissen über grundlegende Webentwicklung haben. (HTML/CSS/JS, Server-Seite versus Client-Seite, etc) und der basic Java Servlet API (Anfrage/Antwort/Sitzung, Weiterleitung/Umleitung, etc), treten keine gravierenden Nachteile auf JSF muss in seiner aktuellen Version 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 Erstveröffentlichung. Es war voll mit Fehlern in den Kern- und Leistungsbereichen, über die Sie nichts wissen wollen. Ihre Webanwendung funktionierte nicht immer so, wie Sie es intuitiv erwartet hatten. Du als Entwickler würdest weinen.

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 nicht einwandfrei HTML in die JSF-Seite einbinden. Alle einfachen Vanilla-HTML-Dateien werden gerendert vor dem JSF-Komponentenbaum. Sie müssen alle einfachen Vanilla-Tags in <f:verbatim> einschließen, damit sie in den JSF-Komponentenbaum aufgenommen werden. Obwohl dies der Spezifikation entsprach, wurde dies vielfach kritisiert. Siehe auch a.o. JSF/Facelets: Warum ist es nicht sinnvoll, 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 eine Menge großartiger Arbeit geleistet. Es gab auch Änderungen in der Spezifikation. Die wesentliche Änderung war die Verbesserung des View-Handlings. Dadurch wurde JSF nicht nur vollständig von JSP getrennt, sondern es konnte auch eine andere View-Technologie als JSP verwendet werden. Entwickler konnten damit auch einfaches Vanilla-HTML in die JSF-Seite einbinden, ohne sich mit <f:verbatim> -Tags herumärgern zu müssen. Ein weiterer Schwerpunkt des neuen Teams lag in der Leistungssteigerung. Während der Laufzeit von Sun JSF Reference Implementation 1.2 (Codename Mojarra seit Build 1.2_08, um 2008) wurde praktisch jeder Build mit (großen) Leistungsverbesserungen ausgeliefert übliche (kleinere) Bugfixes.

Der einzige schwerwiegende Nachteil von JSF 1.x (einschließlich 1.2) ist das Fehlen eines Bereichs zwischen request und session , der so genannte conversation scope. Dies zwang Entwickler, sich mit versteckten Eingabeelementen, unnötigen DB-Abfragen und/oder dem Missbrauch des Sitzungsbereichs herumzuschlagen, 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 gemildert werden, indem eine Bibliothek eines Drittanbieters verwendet wird, die die erforderlichen Daten in der nachfolgenden Anforderung beibehält, z. B. MyFaces Tomahawk<t:saveState> component, JBoss Seam Konversationsumfang und MyFaces Orchestra Konversationsrahmen.

Ein weiterer Nachteil für HTML/CSS-Puristen ist, 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 häufiger wiederverwendet wird als einmal in der Ansicht (Vorlagen erstellen, Komponenten iterieren usw.). Da dies in CSS-Bezeichnern ein unzulässiges Zeichen ist, müssen Sie den \ verwenden, um den Doppelpunkt in CSS-Selektoren zu umgehen. Dies führt zu hässlichen und seltsam aussehenden Selektoren wie #formId\:fieldId {} oder sogar #formId\3A fieldId {}. Siehe auch Wie verwende ich die JSF-generierte HTML-Element-ID mit Doppelpunkt ":" in CSS-Selektoren? Wenn Sie jedoch kein Purist sind, lesen Sie auch Standardmäßig generiert JSF nicht verwendbare IDs, die nicht mit dem CSS-Teil der Webstandards kompatibel sind.

Außerdem wurde JSF 1.x nicht mit sofort einsatzbereiten Ajax-Funktionen ausgeliefert. Kein wirklicher technischer Nachteil, aber aufgrund des Web 2.0-Hype in dieser Zeit wurde es zu einem funktionalen Nachteil. Exadel hat frühzeitig Ajax4jsf eingeführt, das im Laufe der Jahre gründlich weiterentwickelt wurde und der Kern von JBoss RichFaces Komponentenbibliothek. Eine weitere Komponentenbibliothek wurde ebenfalls mit integrierten Ajax-Funktionen ausgeliefert. Die bekannte ist ICEfaces .

Ungefähr zur Hälfte der Lebensdauer von JSF 1.2 wurde eine neue XML-basierte View-Technologie eingeführt: Facelets . Dies bot enorme Vorteile gegenüber JSP, insbesondere im Bereich 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 unter Verwendung von reinem XML (die sogenannten Composite Components ) erweitert. Siehe auch Warum wird Facelets gegenüber JSP als Ansichtsdefinitionssprache ab JSF2.0 bevorzugt?

Ajax-Potenzen wurden in der Version der <f:ajax> -Komponente eingeführt, die viele Ähnlichkeiten mit Ajax4jsf aufweist. Anmerkungen und Verbesserungen in Bezug auf die Konfiguration gegenüber Konventionen wurden so weit wie möglich in kill der ausführlichen faces-config.xml -Datei eingefügt. Außerdem wurde das Standardtrennzeichen für die Namenscontainer-ID : konfigurierbar, sodass HTML/CSS-Puristen erleichtert atmen konnten. Alles, was Sie tun müssen, ist, es als init-param in web.xml mit dem Namen javax.faces.SEPARATOR_CHAR zu definieren und sicherzustellen, dass Sie das Zeichen nicht selbst in Client-IDs verwenden , wie zum Beispiel -.

Last but not least wurde ein neuer Bereich eingeführt, der view Bereich. Es beseitigte einen weiteren großen JSF 1.x-Nachteil, wie zuvor beschrieben. Sie müssen nur das Bean @ViewScoped deklarieren, um den Konversationsbereich zu aktivieren, ohne die Daten in nachfolgenden (Konversations-) Anforderungen auf mühsame Weise zu speichern. Eine @ViewScoped Bean bleibt so lange gültig, wie Sie anschließend (unabhängig vom geöffneten Browser-Tab/-Fenster!) Synchron oder asynchron (Ajax) dieselbe Ansicht senden und zu dieser navigieren. Siehe auch Unterschied zwischen Ansichts- und Anforderungsbereich in verwalteten Beans und Wie wird der richtige Bean-Bereich ausgewählt?

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 in den Tag-Handlern aufgrund eines Hühnerei-Problems beim teilweisen Speichern des Status fehl. Dies ist in JSF 2.2 behoben und in Mojarra 2.1.18 zurückportiert. Außerdem wird das Übergeben von benutzerdefinierten Attributen wie HTML5 data-xxx nicht unterstützt. Dies wird in JSF 2.2 durch die neue Funktion für Durchgriffselemente/Attribute behoben. Weiterhin hat die JSF-Implementierung von Mojarra ihre eigenen Probleme . Relativ viele von ihnen haben mit dem manchmal nicht intuitiven Verhalten von <ui:repeat> zu tun, der neuen Implementierung zum Speichern von Teilzuständen und der schlecht implementierte Flash-Bereich . Die meisten von ihnen sind in einer Mojarra 2.2.x-Version behoben.

Um die JSF 2.0-Zeit herum 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 wird XHTML immer noch verwendet . Die wichtigste neue JSF 2.2-Funktion ist die Unterstützung von benutzerdefinierten Komponentenattributen, wodurch eine Vielzahl von Möglichkeiten eröffnet wird, z. B. benutzerdefinierte tabellenlose Optionsfeldgruppen .

Abgesehen von implementierungsspezifischen Fehlern und einigen "ärgerlichen Kleinigkeiten" wie der Unfähigkeit, einen EJB in einen Validator/Konverter zu injizieren (bereits in JSF 2.3 behoben), gibt es in der JSF 2.2-Spezifikation nicht wirklich große Nachteile.

Komponentenbasierte MVC vs Anforderungsbasierte MVC

Einige mögen der Meinung sein, dass der Hauptnachteil von JSF darin besteht, dass es sehr wenig feinkörnige Kontrolle über das generierte HTML/CSS/JS ermöglicht. Das ist kein JSF-eigenes, sondern nur, weil es sich um ein komponentenbasiertes MVC-Framework handelt, nicht um ein anforderungsbasiertes MVC-Framework. Wenn ein hohes Maß an Kontrolle über HTML/CSS/JS bei der Betrachtung eines MVC-Frameworks Ihre Hauptanforderung ist, sollten Sie sich bereits jetzt kein komponentenbasiertes MVC-Framework, sondern ein anforderungsbasiertes 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:

457
BalusC

Nach 5 Jahren bei JSF denke ich, dass ich meine 2 Cent hinzufügen kann.

Zwei Hauptnachteile von JSF :

  1. Große Lernkurve. JSF ist komplex, das stimmt einfach.
  2. Seine Komponente Natur. Das komponentenbasierte Framework versucht, die wahre Natur des Webs zu verbergen, was mit einer Vielzahl von Komplikationen und Katastrophen einhergeht (beispielsweise, dass GET in JSF innerhalb von fast 5 Jahren nicht mehr unterstützt wird).
    Es ist ein großer Fehler, die HTTP-Anfrage/Antwort des Entwicklers zu verbergen. Meiner Erfahrung nach fügt jedes komponentenbasierte Framework der Webentwicklung Abstraktion hinzu, und diese Abstraktion führt zu unnötigem Overhead und höherer Komplexität.

Und kleinere Nachteile, die mir einfallen:

  1. Standardmäßig setzt sich die ID des Objekts aus den IDs seiner Eltern zusammen, z. B. form1: button1.
  2. Keine einfache Möglichkeit, das Fragment einer falschen Seite auszukommentieren. Tag <ui:remove> Benötigt syntaktisch korrekten Inhalt, der trotzdem analysiert wird.
  3. Komponenten von Drittanbietern geringer Qualität, die z. Überprüfen Sie isRendered() nicht innerhalb der processXxx() -Methode, bevor Sie fortfahren.
  4. Es ist schwer, LESS & Sencha zu integrieren.
  5. Spielt nicht gut mit REST.
  6. Für UX-Designer nicht so einfach, da gebrauchsfertige Komponenten ihre eigenen CSS-Stile haben, die überschrieben werden müssen.

Versteh mich nicht falsch. Als Komponentenframework ist JSF in Version 2 wirklich gut, aber es basiert immer noch auf Komponenten und wird immer ...

Bitte werfen Sie einen Blick auf die geringe Popularität von Tapestry, Wicket und die geringe Begeisterung erfahrener JSF-Entwickler (was noch bedeutsamer ist). Schauen Sie sich im Gegensatz dazu den Erfolg von Rails, Grails, Django, Play an! Framework - sie alle sind aktionsbasiert und versuchen nicht, sich vor dem Programmierer zu verstecken . Wahre Anfrage/Antwort und zustandslose Natur des Webs.

Für mich ist es ein großer Nachteil von JSF. IMHO JSF eignet sich für bestimmte Arten von Anwendungen (Intranet, formenintensiv), aber für reale Webanwendungen ist dies kein guter Weg.

Hoffe, es hilft jemandem bei seinen/ihren Entscheidungen in Bezug auf Frontend.

54
G. Demecki

Ein paar Nachteile, die Ihnen in den Sinn kommen:

  1. JSF ist ein komponentenbasiertes Framework. Dies hat inhärente Einschränkungen, die mit dem Befolgen des Komponentenmodells zu tun haben.
  2. AFAIK JSF unterstützt nur POST. Wenn Sie also irgendwo ein GET wollen, müssen Sie ein einfaches Servlet/JSP ausführen.
  3. Die meisten Komponenten versuchen, Abstraktionen über Domänen wie relationale Datenbanken und Front-End-JavaScript bereitzustellen, und oft sind diese Abstraktionen "undicht" und sehr schwer zu debuggen.
  4. Diese Abstraktionen sind möglicherweise ein guter Ausgangspunkt für einen Nachwuchsentwickler oder jemanden, der sich mit einer bestimmten Domain nicht auskennt (z. B. Front-End-JavaScript), aber es ist sehr schwierig, die Leistung zu optimieren, da mehrere Ebenen beteiligt sind und die meisten Benutzer sie verwenden Ich habe wenig Verständnis dafür, was unter der Haube vor sich geht.
  5. Die Templating-Mechanismen, die normalerweise mit JSF verwendet werden, haben nichts mit der Funktionsweise von Web-Designern zu tun. Die WYSIWYG-Editoren für JSF sind primitiv und Ihr Designer wird Ihnen in jedem Fall HTML/CSS zur Verfügung stellen, das Sie für die Konvertierung in Ewigkeiten benötigen.
  6. Dinge wie EL-Ausdrücke werden nicht statisch überprüft, und sowohl der Compiler als auch die IDEs leisten keine gute Arbeit beim Auffinden von Fehlern, sodass Sie Fehler erhalten, die Sie zur Laufzeit abfangen müssen. Dies mag für dynamisch getippte Sprachen wie Ruby oder PHP in Ordnung sein, aber wenn ich dem Aufblähen des Java= - Ökosystems widerstehen muss, verlange ich das Tippen für mein Vorlagen.

m es zusammenzufassen: Die Zeit, die Sie mit JSF sparen, nachdem Sie vermieden haben, den JSP/Servlet/Bean-Code zu schreiben, haben Sie dafür ausgegeben, ihn x10 zu skalieren und genau das zu tun, was Sie wollen machen.

24
Kay Pale

Für mich ist der größte Nachteil von JSF 2.0 nicht nur die Lernkurve von JSF, sondern auch die Komponentenbibliotheken, die Sie verwenden müssen, um nützliche Arbeit zu leisten. Betrachten Sie die erstaunliche Anzahl von Spezifikationen und Standards, mit denen Sie sich befassen, um wirklich kompetent zu sein:

  • HTML in den verschiedenen Inkarnationen. Tu nicht so, als ob du es nicht wissen müsstest.
  • HTTP - Wenn Sie nicht herausfinden können, was los ist, müssen Sie Firebug öffnen und sehen. Dafür musst du das wissen.
  • CSS - Gefällt mir oder nicht. Es ist wirklich nicht so schlimm und es gibt zumindest einige nette Tools da draußen.
  • XML - JSF wird wahrscheinlich der erste Ort sein, an dem Sie Namespaces in diesem Maße verwenden.
  • Servlet-Spezifikation. Früher oder später werden Sie in diesem Paket Methoden aufrufen. Abgesehen davon müssen Sie wissen, wie Ihre Facelets in XHTML oder was auch immer umgewandelt werden.
  • JSP (hauptsächlich, damit Sie wissen, warum Sie es in JSF nicht benötigen)
  • JSTL (wiederum hauptsächlich zur Bewältigung des Legacy-Frameworks)
  • Ausdruckssprache (EL) in ihren verschiedenen Formen.
  • ECMAScript, JavaScript oder wie auch immer Sie es nennen möchten.
  • JSON - das sollten Sie wissen, auch wenn Sie es nicht benutzen.
  • Ajax. Ich würde sagen, JSF 2.0 macht einen anständigen Job, dies vor Ihnen zu verbergen, aber Sie müssen immer noch wissen, was los ist.
  • Das DOM. Und wie ein Browser es benutzt. Siehe ECMAScript.
  • DOM Events - ein Thema für sich.
  • Java Persistence Architecture (JPA), wenn Ihre App über eine Back-End-Datenbank verfügen soll.
  • Java selbst.
  • JSEE, während Sie dabei sind.
  • Die Context Dependency Injection-Spezifikation (CDI) und ihre Verwendung mit JSF 2.0
  • JQuery - Ich würde gerne sehen, dass Sie ohne auskommen.

Sobald Sie damit fertig sind, können Sie mit den proprietären Spezifikationen, nämlich den Komponentenbibliotheken und Anbieterbibliotheken, fortfahren, die Sie auf dem Weg abrufen werden:

  • PrimeFaces (meine Komponentenbibliothek nach Wahl)
  • RichFaces
  • MyFaces
  • ICEFaces
  • EclipseLink (mein JPA-Provider)
  • Hibernate
  • Schweißen

Und vergiss den Container nicht! Und all diese Konfigurationsdateien:

  • GlassFish (2, 3 usw.)
  • JBoss
  • Kater

Also - DIESE IS EINFACH? Sicher, JSF 2.0 ist "einfach", solange Sie nur die grundlegendsten Webseiten mit den einfachsten Interaktionen ausführen möchten.

Einfach ausgedrückt ist JSF 2.0 das komplizierteste und umständlichste Durcheinander von zusammengeklebten Technologien, wie es im heutigen Softwareuniversum existiert. Und mir fällt nichts ein, was ich lieber benutzen würde.

19
AlanObject
  1. Unerfahrene Entwickler erstellen normalerweise Anwendungen, die sehr langsam sind, und Code ist sehr hässlich und schwer zu warten. Es ist täuschend einfach zu starten, erfordert jedoch eine gewisse Investition in das Lernen, wenn Sie gute Programme schreiben möchten.
  2. Zumindest zu Beginn "stecken" Sie oft an einem Problem fest und verbringen mehr Zeit mit dem Lesen von Balusc-Posts im Internet als mit der eigentlichen Arbeit :) Nach einer Weile wird es immer weniger, aber es kann immer noch ärgerlich sein.
  3. Noch ärgerlicher, wenn Sie feststellen, dass das Problem nicht auf mangelnde Kenntnisse/Fehler zurückzuführen ist, sondern auf einen Fehler. Mojarra war (ist?) Ziemlich fehlerhaft, und eine weitere Schicht von Komponenten fügt noch mehr Probleme hinzu. Richfaces war das größte Stück Mist-Software, das jemals geschrieben wurde :) Weiß nicht, wie es jetzt in Version 4 ist. Wir haben Primefaces, die besser sind, aber Sie werden immer noch auf Fehler oder fehlende Funktionen stoßen, insbesondere bei exotischeren Komponenten. Und jetzt müssen Sie für Primefaces-Updates bezahlen. Also würde ich sagen, dass es fehlerhaft ist, aber es wird besser, besonders nachdem Version 2.2 einige Probleme mit der Spezifikation behoben hat. Framework wird reifer, aber noch lange nicht perfekt (vielleicht meine Gesichter besser?).
  4. Ich finde es nicht besonders flexibel. Oft, wenn Sie etwas sehr sehr Angepasstes benötigen und es keine Komponenten gibt, die dies tun - es wird ein bisschen schmerzhaft sein. Wiederum spreche ich aus der Perspektive eines durchschnittlichen Entwicklers - der mit Deadlines, schnellen Leseübungen und dem Suchen nach Stackoverflow, wenn man nicht weiterkommt, weil keine Zeit zum Lernen ist, wie es wirklich funktioniert :) Oft scheinen einige Komponenten "fast" das zu haben, was man braucht, aber nicht genau und manchmal verbringst du zu viel Zeit damit, etwas zu tun, was du willst :) Sei vorsichtig bei der Bewertung, ob es besser ist, deine eigene Komponente zu erstellen oder bestehende zu quälen. Eigentlich würde ich JSF nicht empfehlen, wenn Sie etwas wirklich Einzigartiges schaffen.

Kurz gesagt, meine Nachteile wären: Komplexität, nicht sehr reibungsloser Entwicklungsfortschritt, fehlerhaft, unflexibel.

Natürlich gibt es auch Vorteile, aber das haben Sie nicht gefragt. Sowieso ist das meine Erfahrung mit Framework, für das andere möglicherweise unterschiedliche Meinungen haben. Am besten probieren Sie es einfach für eine Weile aus, um zu sehen, ob es für Sie geeignet ist (nur etwas komplexeres - keine naiven Beispiele - JSF scheint wirklich dort :) IMHO bester Anwendungsfall für JSF ist Geschäftsanwendungen, wie CRMs etc ...

13
Koks Skirtumas

"JSF gibt View-Layer-HTML und JavaScript aus, die Sie nicht steuern oder ändern können, ohne in den Controller-Code zu wechseln."

Tatsächlich gibt Ihnen JSF die Flexibilität, Sie können entweder Standard-/Drittanbieter-Komponenten verwenden oder eigene Komponenten erstellen, die Sie vollständig steuern können, was gerendert wird. Es ist nur ein xhtml, das Sie benötigen, um Ihre benutzerdefinierten Komponenten mit JSF 2.0 zu erstellen.

11
Cagatay Civici

Wir haben ein Beispielprojekt mit JSF entwickelt (es war eine dreiwöchige Recherche, daher haben wir möglicherweise einige Dinge verloren!)

Wir versuchen, core jsf zu verwenden. Wenn eine Komponente benötigt wird, haben wir PrimeFaces verwendet.

Das Projekt war eine Website mit Navigation. Jede Seite sollte über Ajax geladen werden, wenn auf das Menü geklickt wird.

Die Site hat zwei Verwendungszwecke:

  1. Eine Seite mit einem Raster. Das Gitter wird über Ajax geladen und sollte Sortieren und Paging unterstützen
  2. Eine Assistentenseite mit drei Schritten. Jede Seite verfügt über eine clientseitige Validierung (für einfache Validierungen) und eine serverseitige Ajax-Basisvalidierung (für komplexe Validierungen). Jede Serverausnahme (aus der Serviceebene) sollte auf derselben Seite des Assistenten angezeigt werden, ohne zur nächsten Seite zu navigieren.

Wir haben das gefunden:

  1. Sie müssen einige Hacks von omniFaces verwenden, um den Status der JSF-Ansicht zu korrigieren. Der JSF-Status wird beschädigt, wenn Sie Seiten über Ajax ineinander einfügen. Dies scheint ein Fehler in JSF zu sein und wird möglicherweise in den nächsten Releases behoben (nicht in 2.3).
  2. Der JSF Flow funktioniert mit Ajax nicht richtig (oder wir konnten ihn nicht zum Laufen bringen!). Wir versuchen stattdessen, die Komponente des Primeface-Assistenten zu verwenden, aber die Client-Validierung scheint nicht unterstützt zu werden, obwohl es kein Standard-JSF-Flow-Standard war.
  3. Wenn Sie einige jQuery-Komponenten wie jqGird verwenden und JSON-Ergebnisse laden müssen, wird die Verwendung eines reinen Servlets empfohlen. Die JSF wird nichts für Sie tun. Wenn Sie diese Art von Komponenten verwenden, passt Ihr Design nicht in JSF.
  4. Wir versuchen, einige Client-Skripte auszuführen, wenn Ajax durch ajaxComplete abgeschlossen ist, und wir haben festgestellt, dass der PF 4 seine eigenen Ajax-Ereignisse implementiert hat. Wir hatten einige jQuery-Komponenten und müssen ihren Code ändern.

Wenn Sie das obige Beispiel in ein nicht Ajax - Projekt (oder zumindest ein weniger Ajax-Projekt) ändern, werden Sie nicht mit vielen der oben genannten Probleme konfrontiert.

Wir fassen unsere Forschung wie folgt zusammen:

JSF funktioniert auf einer vollständig ajax-basierten Website nicht gut.

Natürlich finden wir in JSF viele nette Funktionen, die in einigen Projekten sehr hilfreich sein können. Berücksichtigen Sie also Ihre Projektanforderungen.

Informationen zu den Vorteilen von JSF finden Sie in den technischen Dokumenten von JSF. Der größte Vorteil von JSF ist meiner Meinung nach die KOMPLETTE UND GROSSE Unterstützung von @BalusC ;-)

10
Alireza Fattahi

Ich bin überhaupt kein Java Server Faces-Experte. Aber meiner Meinung nach ist der Hauptnachteil, dass es sich um eine Serverseite handelt. Ich bin es leid, serverseitige Frameworks für Webpräsentationsebenen wie ASP.NET zu lernen und zu verwenden Web Forms, ASP.NET MVC, Java Server Faces, Struts, PHP Frameworks und Ruby on Rails Frameworks. I Ich habe mich von allen verabschiedet und mich von Angularjs und TypeScript verabschiedet. Meine Präsentationsebene wird im Browser ausgeführt. Es spielt keine Rolle, ob sie von Windows IIS mit PHP oder ASP ausgeführt wird. NET, oder wenn es von einem Apache-Webserver unter Linux bereitgestellt wird. Ich muss nur ein Framework lernen, das überall funktioniert.

Nur meine zwei Cent.

10
Jesús López

Kommentar zu meinen letzten Monaten mit Primefaces/JSF:

  • Wenn Sie Komponenten "von der Stange" verwenden können, ist das vermutlich nicht schrecklich.
  • Es funktioniert jedoch nicht richtig, sobald Sie nach draußen treten und benutzerdefinierte Benutzeroberflächen benötigen. - Zum Beispiel mussten wir für unser Projekt den Twitter-Code bootstrap. (Not primefaces bootstrap). Verwenden.
    • Jetzt funktionieren unsere Seiten wie folgt:
      • Die Seite wird geladen.
      • Der Benutzer interagiert mit Primefaces mit Ajax-Funktionalität
      • Die Javascript-Bindungen von Bootstrap brechen
      • Wir verwenden zusätzliches Javascript, um alles neu zu binden

Das Versprechen von JSF, das Schreiben von Javascript zu vermeiden, verwandelte sich in das Schreiben von mehr Javascript, als wir hätten, wenn Primefaces nicht verwendet würden.

Es ist eine Zeitsenke - es sei denn, Sie verwenden wieder Sachen von der Stange. Auch sehr hässlich (Primefaces), wenn man mit Selen arbeiten muss. Es kann alles gemacht werden - aber es bleibt nur so viel Zeit.

Vermeiden Sie dies auf jeden Fall, wenn Sie mit einem UX-/Designteam zusammenarbeiten und schnell auf der Benutzeroberfläche iterieren müssen. Sie können Zeit sparen, indem Sie lernen, wie man HTML-Code abruft oder direkt schreibt.

6
rprasad

Das größte Manko von JSF ist für mich die schlechte Unterstützung für programmatisch (dynamisch) generierte Seiten.
Wenn Sie Ihre Seite dynamisch aus dem Code Java) erstellen möchten, zum Beispiel, wenn Sie am WYSIWYG-Webseiten-Konstruktor arbeiten. Angemessene Dokumentation dieses Anwendungsfalls in nicht allgemein verfügbar. Es gibt viele Punkte, an denen Sie experimentieren müssen und die Entwicklung ist sehr langsam. Viele Dinge funktionieren einfach nicht so, wie Sie es erwarten würden. Aber im Allgemeinen ist es möglich, es irgendwie zu hacken.
Gut ist, dass es in der Philosophie oder Architektur von JSF kein Problem gibt. Es ist einfach nicht genug ausgearbeitet (soweit ich weiß).

JSF 2 brachte Composite Components mit, die die Entwicklung von Komponenten vereinfachen sollten, deren Unterstützung für dynamische (programmatische) Konstruktionen jedoch sehr gering ist. Wenn Sie einen recht komplizierten und fast undokumentierten Prozess der dynamischen Konstruktion von Verbundbauteilen überwinden, werden Sie feststellen, dass wenige Verbundbauteile nicht mehr funktionieren, wenn Sie sie etwas tiefer verschachteln, was einige Ausnahmen zur Folge hat.

Es scheint jedoch, dass die JSF-Gemeinschaft sich dieser Mängel bewusst ist. Sie arbeiten daran, wie Sie an diesen beiden Fehlern sehen können
http://Java.net/jira/browse/JAVASERVERFACES-1309
http://Java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-599

Mit JSF 2.2 sollte die Situation zumindest dann besser sein, wenn es sich um Spezifikationen handelt.

6
Ondrej Bozek

JSF hat viele Vorteile, da die Frage im Nachteil ist, möchte ich ein paar Punkte hinzufügen.

In einem praktischen Szenario für die Implementierung eines Webprojekts in einem bestimmten Zeitraum müssen Sie die folgenden Faktoren im Auge behalten.

  • Haben Sie genug hochrangige Mitglieder in Ihrem Team, die für jedes Szenario die besten Steuerungen vorschlagen können?
  • Haben Sie die Bandbreite, um die anfängliche Lernkurve aufzunehmen?

  • Haben Sie genügend Fachwissen in Ihrem Team, das die JSF überprüfen kann?
    Zeug produziert von den Entwicklern?

Lautet Ihre Antwort bei den Fragen "Nein", landen Sie möglicherweise in einer nicht verwaltbaren Codebasis.

1
Sam

Unter allen "Mainstream" -Frameworks wie Spring MVC, Wicket, Tapestry usw. ist das JSF von Java EE mit seinen zusammengesetzten Komponenten die am besten ausgearbeitete Präsentationsebene und komponentenorientierte Technologie Es ist etwas umständlich und unvollständig im Vergleich zu den von HybridJava angebotenen Lösungen.

0
Dima

JSF hat nur einen Nachteil: Bevor Sie mit der "JSF" -Entwicklung beginnen, sollten Sie die Web-Entwicklung, die Core Java und die Front-End-Architektur genau verstehen.

Heutzutage versuchen "neue" JavaScript-Frameworks nur, "JSF" -Komponentenmodelle zu kopieren und einzufügen.

0