Was ist die Notwendigkeit von JSF, wenn die Benutzeroberfläche mit JavaScript-Bibliotheken wie jQuery und AngularJS erreicht werden kann

115

Ich habe über JSF gelesen, dass es ein UI-Framework ist und einige UI-Komponenten bereitstellt. Aber wie ist es besser oder anders als die Anzahl der Komponenten, die von jQueryUI, AngularJS, ExtJS oder sogar einfachem HTML, CSS und JavaScript verfügbar sind?

Warum sollte jemand JSF lernen?

Sushil Bharwani
quelle
3
Vorteile von servergeneriertem HTML: Suchbarkeit in Suchmaschinen, Ausblenden von Ansichten basierend auf der Autorisierung. Ansonsten haben wir es für reine Ajax-UI aufgegeben.
Neil McGuigan
5
Ich habe JSF auch zugunsten des AngularJS + RESTful-Backends aufgegeben. (Äpfel und Orangen, aber Angular ist so nett, dass ich nicht viele der Vorteile von JSF
brauche
JSF ist ein komponentenbasiertes MVC-Framework, das auf der Servlet-API basiert und Komponenten über Taglibs bereitstellt, die in JSP oder einer anderen Java-basierten Ansichtstechnologie wie Facelets verwendet werden können.
Divyesh Kanzariya

Antworten:

153

JSF zu einfachem JSP / Servlet / HTML / CSS / JS ist wie jQuery zu einfachem JS: Mit weniger Code mehr erreichen. Um PrimeFaces (basierend auf jQuery + jQuery UI) als Beispiel zu verwenden, durchsuchen Sie das Schaufenster , um vollständige Codebeispiele anzuzeigen. BootsFaces (jQuery + Bootstrap UI-basiert) bietet auch ein Schaufenster mit vollständigen Codebeispielen. Wenn Sie diese Beispiele genau studieren, werden Sie feststellen, dass Sie grundsätzlich eine einfache Javabean-Klasse als Modell und eine XHTML-Datei als Ansicht benötigen.

Beachten Sie, dass Sie JSF nicht als Ersatz für HTML / CSS / JS sehen sollten, sondern auch den serverseitigen Teil berücksichtigen sollten (insbesondere: JSP / Servlet). JSF macht das Boilerplate überflüssig, HTTP-Anforderungsparameter zu erfassen, zu konvertieren / validieren, die Modellwerte zu aktualisieren, die richtige Java-Methode für die Geschäftsabwicklung auszuführen und den HTML / CSS / JS-Boilerplate-Code zu generieren. Mit JSF erhalten Sie im Grunde eine XHTML-Seite als Ansichtsdefinition und eine Javabean-Klasse als Modelldefinition. Dies beschleunigt die Entwicklung erheblich.

Wie bei jedem komponentenbasierten Web-MVC-Framework haben Sie in JSF eine weniger fein abgestimmte Kontrolle über das gerenderte HTML / CSS / JS. Das Hinzufügen von benutzerdefiniertem JS-Code ist nicht so einfach, da Sie auch den JSF-Ansichtsstatus auf der Serverseite berücksichtigen müssen (z. B. wird durch Aktivieren einer deaktivierten Schaltfläche auf der JS-Seite die Schaltfläche auf der JSF-Seite nicht aktiviert, was wiederum a ist großer Sicherheitsvorteil). Wenn dies jedoch ein wichtiger Showstopper ist, suchen Sie lieber nach einem aktionsbasierten Web-MVC-Framework wie Spring MVC . Sie werden nur berücksichtigen, dass Sie den gesamten HTML / CSS / JS-Code selbst schreiben müssen . Auch wenn Sie von Facelets auf JSP zurückgreifen, werden Sie auch erweiterte Vorlagenfunktionen vermissen.

Wenn Sie jedoch eine große JSP / Servlet / HTML / CSS / JS / jQuery-basierte Website haben und den wiederholten JSP / Servlet / HTML / CSS / JS / jQuery-Boilerplate-Code in wiederverwendbare Komponenten umgestalten möchten, dann Eine der Lösungen wäre JSF. Benutzerdefinierte Vorlagen, Tagfiles und Komponenten können dabei helfen. In dieser Perspektive steht JSF über JSP / Servlet / HTML / CSS / JS / jQuery (und deshalb ist es auch ziemlich wichtig, diese Grundlagen zu verstehen, bevor Sie in JSF eintauchen).

Ein reales JSF-basiertes Kickoff-Projekt finden Sie hier: Java EE Kickoff App . Sie werden sehen, dass es neben JSF auch gutes HTML5 , CSS3 und jQuery enthält .

Siehe auch:

BalusC
quelle
15
Mit weniger Code mehr erreichen? Aber mit mehr XML ... was für ein Kompromiss ... zusätzlich raubt es Ihnen Flexibilität
Danubian Sailor
33
In JSF 2.0+ ist XML nicht erforderlich.
Cagatay Civici
5
Wir haben Anmerkungen in JSF 2.0
VdeX
1
Es scheint, dass es mit JSF keine klare Abgrenzung zwischen der Business- / Controller-Schicht und der Ansicht gibt, da ein Großteil der Ansicht auf dem Server generiert wird. Ich verstehe, dass alles auf dem Server kompiliert wird, bevor es an den Browser gesendet wird, aber ich bevorzuge, dass mein Java-Objekt Daten zurückgibt, die von der Ansicht gerendert werden, anstatt Renderlogik / -daten zu senden.
Rick
1
Ich bin damit einverstanden, dass JSF eine serverseitige Sache mit leistungsstarker Kontrolle über HTML ist.
Plain_Dude_Sleeping_Alone
28

JSF wurde erstellt, damit Java-Shops nicht wie jQuery lernen und komplexe JS erstellen müssen, sondern sich auf einen reinen Java-Stack konzentrieren müssen. In einer Welt, in der Zeit Geld ist und viele Orte sich bereits auf die Java-Entwicklung konzentrieren, macht eine Sprache weniger im Stapel das Training und die Wartung schneller und damit billiger.

Ich möchte hinzufügen, dass JavaScript in großen Teams leicht zu einem Alptraum für die Wartung wird, insbesondere wenn einige der Entwickler des Projekts nicht sehr web-versiert sind.

Andrew White
quelle
Wenn ich mit JQuery JS usw. ziemlich vertraut bin, muss ich mich nicht auf JSF konzentrieren?
Sushil Bharwani
2
Es hängt alles davon ab, welches Problem Sie lösen möchten und mit welchem ​​Team Sie es lösen.
Andrew White
1
Ich stimme dem Team zu, aber ich bin daran interessiert zu erfahren, welche unterschiedlichen Probleme JSF lösen kann und js jQuery usw. nicht. Ich versuche nur, die Motivation aufzubauen, um JSF zu lernen.
Sushil Bharwani
1
Keine, es bietet nur eine andere Möglichkeit, die gleichen Probleme zu lösen.
Andrew White
8
Auch wenn Sie mit JQuery sehr vertraut sind, ist JSF immer noch sehr nützlich. Es bietet eine einfache Möglichkeit, serverseitigen Code mit clientseitigen Darstellungen zu verbinden. Einige Facelets-Composite-Komponenten sind nur ein ziemlich dünner Wrapper um HTML und JS (einschließlich JQuery). Sie sind ein Kinderspiel und erleichtern im Allgemeinen die gesamte Client-Server-seitige Verbindung.
Arjan Tijms
23

Mit Javascript und Frameworks wie jQuery haben Sie volle Flexibilität und volle Kontrolle. Mit ext's usw. verlieren Sie viel Kontrolle und müssen sich an das Framework anpassen. Mit JSF verlieren Sie die Kontrolle und müssen sich vollständig an das Framework anpassen. Sie werden in Lebenszyklen usw. aufgerufen und haben schließlich keine Kontrolle darüber, wann der Anruf beim Server getätigt werden kann und wo nicht. Wenn Sie etwas tun wollen, das als "besonders" gilt, sind Sie in einer sehr schwierigen Position. Und in der JSF-Welt werden selbst grundlegende Dinge wie mehrspaltige Tabellensortierung oder Felder, in die Sie nur einen begrenzten Satz von Zeichen eingeben können (z. B. ein Zahlenfeld), als "speziell" betrachtet.

Je mehr Flexibilität Sie haben, desto mehr Fehler oder schlechte Praktiken können Sie machen. Hohe Flexibilität funktioniert nur mit hochintelligenten Programmierern, andere machen das Projekt zu einem unüberschaubaren Albtraum.

Aber mit JSF und seiner begrenzten Flexibilität gibt es immer nur wenige (oder sogar nur einen) richtigen Weg, um etwas zu tun. Sie sind sehr eingeschränkt, Sie können keine Verknüpfungen erstellen, Sie müssen mehr XML usw. schreiben. Wenn Sie sich jedoch an den Standard anpassen, können Sie den Code, den unerfahrene oder gering qualifizierte Programmierer erstellen, besser kontrollieren. Aus diesem Grund lieben große Unternehmen JSF, weil es für sie „sicherer“ ist.

Als ich von GWT zu JSF wechselte, war ich schockiert, wie viele Dinge, die für mich natürlich waren, als höchst untypisch angesehen wurden und wie viele einfache Dinge so schwer zu erreichen waren. Selbst wenn kleinste Änderungen vorgenommen wurden, z. B. das Hinzufügen eines ':' - Zeichens nach dem Etikett, das in der GWT / jQuery-App eine Funktion zum Generieren des Etiketts ändern würde, mussten Dutzende von Dateien mit lokalisierten Eigenschaften geändert werden, was von nicht einmal berücksichtigt wurde jemand außer mir seltsam ...

Donau-Seemann
quelle
7
PrimeFaces basiert auf jQuery, sodass Sie auf der Clientseite viel Flexibilität haben. Außerdem bieten PrimeFaces-Komponenten auf Client- und Serverseite viele Hooks als Ereignisrückrufe, die Sie anpassen können. Javascript-APIs können überschrieben und CSS auch für ein individuelles Aussehen. : label kann global in web.xml für einen jQuery-freundlicheren Charakter konfiguriert werden.
Cagatay Civici
1
Einverstanden. Die allgemeine Regel lautet: Die Verwendung eines Frameworks erfordert eine erweiterte Javascript-Programmierung und ist schwer zu warten, ermöglicht jedoch eine erheblich höhere Leistung und Komplexität, während das Vertrauen in Frameworks einfacher zu erstellen und zu warten ist, jedoch die potenzielle Kapazität der App begrenzt.
KTys
10

Die Vorteile der Verwendung von JSF liegen nicht nur in der Generierung von xhtml + css + js. Manchmal legt JSF eine Einschränkung für das Markup fest, das Sie generieren können, wie bei jedem komponentenbasierten Framework. Aber JSF ist nicht nur dafür, sein Lebensstil hilft sehr. Nach der Überprüfung der Eingabe kann das Modell aktualisiert und Ihre serverseitigen Beans ohne Aufwand synchronisiert werden. Sie sagen einfach "Was auch immer der Benutzer hier eingibt, prüfen Sie, ob es sich um eine Zahl handelt, wenn ja, speichern Sie sie in der Eigenschaft YY in Objekt XX", und JSF erledigt das alles.

Ja, Sie können weiterhin JQuery, JS usw. verwenden. JSF bietet jedoch viele Vorteile beim Schreiben von serverseitigem Code und erspart Ihnen viel Kesselplatte.

arg20
quelle
9

Ich bin nicht der Meinung, dass jsf etwas hinzufügt. Es fügt nur Overhead hinzu. UI-Sachen auf dem Server zu machen ist das Lächerlichste, was ich je gehört habe. Und Javascript in großen Teams funktioniert hervorragend - es wird als Wiederverwendungscode bezeichnet.

Wickeln Sie die JQuery einfach in einige JSP-Tags, das ist alles, was Sie brauchen und was Sie getan haben, und ertragen Sie die Probleme mit Fesseln und Skalierbarkeit mit JSF und RichFaces nicht.

guwst
quelle
14
JSF ist auf formularbasierte Anwendungen ausgerichtet. jQuery ist nett (zum Teufel, viele beliebte JSF-Komponentenbibliotheken wie PrimeFaces, RichFaces und IceFaces verwenden es sogar unter der Decke), aber jQuery vereinfacht die Verarbeitung von Formularübermittlungen auf der Serverseite in keiner Weise. Die Verwendung von einfachem JSP / Servlet führt nur zu schrecklichem Boilerplate-Code. Auch hier ist JSF nicht nur HTML / CSS / JS, sondern auch JSP / Servlet.
BalusC
2
Ich denke, wenn Sie mehr über JSF im Allgemeinen und über den Lebenszyklus einer JSF-Seite im Besonderen lesen, könnten Sie Ihre Meinung ändern. Andererseits könnten Sie nicht.
Ahmed Anwar
5

Nachdem ich mit JSF, Spring MVC, Struts, Grails, JQuery und ExtJS gearbeitet habe, bin ich der Meinung, dass Grails + ExtJS eine leistungsstarke Kombination ist.

Ich würde jeden Tag Grails über JSF pflücken. Ich mag die Vollständigkeit von ExtJS als clientseitiges Framework und Bibliothek, aber es hat eine steilere Lernkurve als JQuery.

dbrin
quelle
3

Hier sind die größten Unterschiede zwischen jQuery und JSF:

  • Keine MVC-Architektur
  • Keine Statuskontrolle (Datum in Sitzung oder Konversation speichern, automatische Bereinigung usw.)
  • Keine (Standard-) Validierungsbibliothek
  • Keine Vorlagenbibliothek
  • Keine erweiterte Navigation / Weiterleitung
  • Client-Seite

jQuery sollte niemals als Full-Stack-Webframework verwendet werden. Es war eher dazu gedacht, JS-Code auf niedriger Ebene zu ersetzen, damit das Schreiben von JS in weniger Codezeilen einfacher und leistungsfähiger wird.

Daher sollte es hauptsächlich zum Hinzufügen von Verhalten zu HTML-Elementen verwendet werden.

Serkan
quelle
2

Nachdem ich das ExtJS-Framework für eine große Webanwendung verwendet habe, weiß ich, wie einfach es zu verwenden ist. Das ExtJS (Schena) eignet sich am besten für (Oracle 11g) Datenbankinteraktionen in der MVC-Architektur. Die Ansicht war für die visuellen / Benutzerinteraktionen. Der Controller gab die 'Verarbeitung' und die Trigger an, die für die PLSQL-Pakete verwendet werden mussten (die API für die CRUD-, SQL-Auswahlabfragen usw.). Das Modell und die Speicherdateien wurden verwendet, um die Datenelemente dem Viewer / den Eingaben zuzuordnen.

ExtJS ist nicht für nicht datenbankintensive Webschnittstellen geeignet, bei denen Angular JS möglicherweise besser geeignet ist.

Lukas Knaf
quelle