Je lisais au sujet de JSF que c’est un cadre d’interface utilisateur et quelques composants d’interface utilisateur. Mais comment est-il meilleur ou différent du nombre de composants disponibles à partir de jQueryUI, AngularJS, ExtJS, ou même du HTML simple, des CSS et du JavaScript.
Pourquoi quelqu'un devrait-il apprendre JSF?
JSF to plain JSP/Servlet/HTML/CSS/JS est comme jQuery to plain JS: faire plus avec moins de code. Pour prendre PrimeFaces (basé sur jQuery + jQuery UI), parcourez son showcase pour voir des exemples de code complets. BootsFaces (jQuery + Bootstrap basé sur l'interface utilisateur) a également un vitrine avec des exemples de code complets. Si vous étudiez ces exemples de près, vous ' Nous verrons que vous avez essentiellement besoin d’une classe javabéenne simple comme modèle et d’un fichier XHTML comme vue.
Notez que vous ne devez pas considérer JSF comme un remplacement de HTML/CSS/JS seul, vous devez également prendre en compte la partie serveur (en particulier: JSP/Servlet). JSF supprime la nécessité de rassembler les paramètres de requête HTTP, de les convertir/valider, de mettre à jour les valeurs du modèle, d’exécuter la bonne méthode Java) et de générer le code HTML/CSS/Code standard JS: Avec JSF, vous vous retrouvez avec une page XHTML comme définition de vue et une classe Javabean comme définition de modèle, ce qui accélère considérablement le développement.
Comme avec chaque infrastructure Web MVC basée sur des composants, JSF offre un contrôle moins détaillé sur le rendu HTML/CSS/JS. L’ajout de code JS personnalisé n’est pas si simple, car vous devez également prendre en compte l’état de la vue JSF côté serveur (par exemple, activer un bouton désactivé du côté JS ne l’activera pas au côté JSF, qui est à son tour un énorme avantage de sécurité). S'il s'agit toutefois d'un obstacle majeur, optez plutôt pour un framework MVC Web basé sur des actions, tel que Spring MVC . Vous ne ferez que prendre en compte le fait que vous devez écrire vous-même tout le code HTML/CSS/JS . De même, si vous passez de Facelets à JSP, vous manquerez également des fonctionnalités avancées de création de modèles.
Par contre, si vous avez un grand site Web basé sur JSP/Servlet/HTML/CSS/JS/jQuery et que vous souhaitez refactoriser le code JSP/Servlet/HTML/CSS/JS/jQuery répété en composants réutilisables, Une des solutions serait JSF. Des modèles, des fichiers tag et des composants personnalisés peuvent vous aider. Dans cette perspective, JSF se situe au-dessus de JSP/Servlet/HTML/CSS/JS/jQuery (et c’est aussi pourquoi il est très important de comprendre ces bases avant de plonger dans JSF).
Vous pouvez trouver ici un projet basé sur JSF dans le monde réel: Java EE Kickoff App . Vous verrez qu'il contient à côté de JSF aussi bon HTML5 , CSS et jQuery .
JSF a été créé pour faire en sorte que les magasins Java ne doivent pas apprendre des choses comme jQuery et construire des JS complexes, mais se concentrent sur une pile purement Java. Dans un monde où le temps, c'est de l'argent et de nombreux endroits qui se concentrent déjà sur le développement Java, un langage/élément de moins dans la pile rend la formation et la maintenance plus rapides et donc moins chères.
J'ajouterai que JavaScript est facile à transformer en cauchemar de maintenance pour les grandes équipes, surtout si certains des développeurs du projet ne sont pas très férus de Web.
Avec Javascript et des frameworks tels que jQuery, vous avez une flexibilité et un contrôle total. Avec ext, etc., vous perdez beaucoup de contrôle et devez vous adapter au framework. Avec JSF, vous perdez totalement le contrôle et devez totalement vous adapter au framework. Vous êtes appelé dans les cycles de vie, etc. et finalement, vous n'avez aucun contrôle sur le moment où l'appel au serveur peut être effectué ou non. Si vous devez faire quelque chose considéré comme "spécial", vous êtes dans une position très difficile. Et dans le monde JSF, même des éléments de base tels que le tri de table multicolonne ou les champs dans lesquels vous ne pouvez taper que des jeux de caractères limités (tels que le champ de numéro) sont considérés comme spéciaux.
Cependant, plus vous avez de la flexibilité, plus vous pouvez commettre d’erreurs ou de mauvaises pratiques. Une grande flexibilité ne fonctionne qu'avec des programmeurs très intelligents, d'autres transformeront le projet en cauchemar ingérable.
Mais, avec JSF et sa flexibilité limitée, il n’ya toujours que quelques (ou même une seule) manière correcte de faire quelque chose. Vous êtes très limité, vous ne pouvez pas créer de raccourcis, vous devez écrire davantage de code XML, etc. - mais lors de l'adaptation à la norme, vous obtiendrez un meilleur contrôle du code produit par les programmeurs inexpérimentés ou peu qualifiés. En conséquence, les grandes entreprises aiment JSF parce que c'est "plus sûr" pour elles.
Lorsque je suis passé de GWT à JSF, j'ai été choqué de constater combien de choses, qui me paraissaient naturelles, étaient considérées comme extrêmement atypiques et à quel point les choses simples étaient si difficiles à réaliser. De plus, même en effectuant les plus petites modifications, telles que l’ajout du signe: après le libellé, qui dans l’application alimentée GWT/jQuery modifierait un libellé générant une fonction, il a été nécessaire de modifier des dizaines de fichiers avec des propriétés localisées, ce qui n’était même pas pris en compte par les utilisateurs. n'importe qui sauf moi étrange ...
Je suis fortement en désaccord que jsf ajoute quelque chose. Cela ne fait qu'ajouter des frais généraux. Faire des choses sur le serveur est la chose la plus ridicule que j'ai jamais entendue. Et javascript sur les grandes équipes fonctionne très bien - c'est ce qu'on appelle la réutilisation du code.
Emballez simplement le jQuery dans des balises JSP, c’est tout ce dont vous avez besoin et ce que vous avez fait, et ne supportez pas les problèmes liés à l’échelonnement et à l’évolutivité avec.jsf et richfaces.
L’utilisation de JSF ne présente pas seulement les avantages de générer xhtml + css + js. Parfois, JSF impose une restriction au balisage que vous pouvez générer, comme tout framework basé sur des composants. Mais JSF n’est pas juste pour ça, son cycle de vie aide beaucoup. Après avoir validé l'entrée, il peut mettre à jour le modèle et synchroniser vos beans côté serveur sans aucun effort. vous dites simplement "quel que soit le type d'utilisateur saisi ici, vérifiez s'il s'agit d'un numéro, si oui, stockez-le dans la propriété YY dans l'objet XX" et JSF fera tout cela.
Donc, oui, vous pouvez toujours utiliser JQuery, JS, etc. Mais JSF offre de nombreux avantages pour l'écriture de code côté serveur et vous évite beaucoup de problèmes liés à la chaudière.
Ayant travaillé avec JSF, Spring MVC, Struts, Grails, JQuery et ExtJS, je suis d’avis que Grails + ExtJS est une combinaison puissante.
Je choisirais Grails sur JSF tous les jours. J'aime la complétude d'ExtJS en tant que framework et bibliothèque côté client, mais sa courbe d'apprentissage est plus raide que celle de JQuery.
Voici les plus grandes différences entre jQuery et JSF:
jQuery n'a jamais été conçu pour être utilisé comme une structure web complète. Il était plus destiné à remplacer le code JS de bas niveau afin que l'écriture de JS devienne plus facile et plus puissante en moins de lignes de code.
Et il devrait donc être principalement utilisé pour ajouter un comportement aux éléments HTML.
Ayant utilisé le cadre ExtJS pour une grande application Web, je sais à quel point il est facile à utiliser. ExtJS (Schena) convient parfaitement aux interactions de base de données (Oracle 11g) dans l'architecture MVC. La vue était destinée aux interactions visuels/utilisateurs. Le contrôleur a spécifié le "traitement" et les déclencheurs devant être utilisés forment les packages PLSQL (l'API pour le CRUD, les requêtes de sélection SQL, etc.). Les fichiers de modèle et de magasin ont été utilisés pour "mapper" les éléments de données vers le visualiseur/les entrées.
ExtJS ne convient pas aux interfaces Web non gourmandes en bases de données - où Angular JS peut être un meilleur ajustement.