JavaServer Faces (JSF) est un cadre de présentation de modèle qui est généralement utilisé pour créer des applications Web basées sur des formulaires HTML. À l'aide des composants standard et du kit de rendu, des vues HTML avec état peuvent être définies à l'aide de balises Facelets ou JSP et câblées pour modéliser les données et la logique d'application via des beans de sauvegarde.

Informations à fournir lorsque vous posez des questions JSF

Si vous voulez de bonnes réponses à vos questions JSF, vous les obtiendrez plus rapidement si vous incluez immédiatement les informations suivantes dans la question.

  • Quelle implémentation et version JSF utilisez-vous?

    Mojarraou MyFaces? 1.0.x, 1.1.x, 1.2.x, 2.0.x, 2.1.x, 2.2.x ou 2.3.x? Vous pouvez généralement trouver le nom et la version exacts de l'implémentation dans le journal de démarrage de l'application Web ou au moins dans le nom de fichier de JAR et / ou le fichier MANIFEST.MF. Mentionnez également la version exacte de tout composant / bibliothèque d'utilitaires JSF impliqué dans le problème. Si vous ne mentionnez rien, nous supposerons la dernière version disponible à ce jour.

    La différence entre JSF 1.x et JSF 2.x est trop grande pour pouvoir donner une réponse fiable pouvant couvrir les deux versions. En outre, chacune des implémentations / bibliothèques JSF peut avoir son propre ensemble de bogues / bizarreries spécifiques à la version afin que le répondant puisse, si nécessaire, en tenir compte. Au cas où une version plus récente serait disponible, vous devriez essayer de mettre à niveau, puis tester à nouveau le problème.

  • Des avertissements / erreurs / exceptions dans les messages de visages, ou la console du navigateur, ou les journaux du serveur?

    Si l'application semble échouer en silence, assurez-vous que vous avez ajouté une balise <h:messages> à votre page JSF pour éviter que vous ne manquiez des messages de visage. Assurez-vous également que vous avez défini javax.faces.PROJECT_STAGE sur Development dans web.xml pour éviter de manquer des avertissements / conseils de développement. Assurez-vous également que vous avez lu la console du navigateur (appuyez sur F12 dans Chrome / Firefox23 + / IE9 +) et les journaux du serveur de haut en bas. Examinez toute ligne qui représente un avertissement ou une erreur ou qui semble anormale.

    Lorsque vous obtenez une exception, incluez toujours la cause racine la plus en bas de la trace de la pile avec toutes les lignes "at" (toutes les autres causes ci-dessus ne sont que des conséquences). Les exceptions sont généralement d'excellents mots clés de recherche. Vous pouvez simplement rechercher le type d'exception + le message et éventuellement la 1ère ligne "à" de la trace sans les parenthèses + le numéro de lin pour voir si ce n'est pas déjà demandé et répondu avant. Exemple 1, exemple 2, exemple 3.

  • Fournissez un exemple reproductible minimal!

    Essayez d'isoler le problème autant que possible dans l'exemple le plus petit mais complet de copier-coller / exécuter. Quant au code Java (backing bean), vous n'avez pas besoin d'inclure les importations et les getters / setters. Vous n'avez pas non plus besoin d'inclure de champs et de méthodes qui ne contribuent pas au problème réel. Quant au code XHTML (affichage), vous n'avez pas besoin d'inclure de balises et d'attributs qui ne contribuent pas au problème réel. Vous n'avez pas non plus besoin d'inclure l'ensemble de la couche de services aux entreprises (EJB / JPA / Spring / DAO / JDBC / etc), juste un modèle codé en dur suffit (sinon ce n'est pas nécessairement un problème lié à JSF).

    Vous devez supposer que le répondeur potentiel copiera-collera le code Java fourni dans une classe de test vide et organisera automatiquement les importations et générera automatiquement les getters / setters si nécessaire, et copypasera le code XHTML fourni dans un <h:body> d'un modèle sans modèle (!) fichier de test dans un projet vierge avec tout défini par défaut (c.-à-d. aucun fichier de configuration XML vide ou vide!) et utilisant les dernières versions actuelles des bibliothèques / serveur, sauf indication contraire explicite dans la question elle-même (et vous devez également le tester vous-même de cette façon au préalable!).

Sans les informations ci-dessus et / ou un MCVE approprié, obtenir des réponses dépendra davantage de la chance (il n'y a pas d'ambiguïté ni de bruit dans la question quant aux causes possibles) et des suppositions éclairées des répondeurs potentiels (connaissant les erreurs les plus courantes du démarreur). Sinon, vous risquez de fermer la question en tant que "Hors sujet, car il n'y a pas de MCVE ou il n'y a qu'un vidage de code complet", ou "Trop large, car il nous demande essentiellement d'écrire du code au lieu d'expliquer et de résoudre un problème".


Exigences minimales

  • JSF 2.4 n'existe pas vraiment, même s'il est accidentellement présent dans Maven! Voir également Mise à niveau vers JSF 2.4et Ne pas utiliser org.glassfish Mojarra 2.4.0!Vous devez choisir la dernière version 2.3.x actuelle, ou le futur JSF 3.x (pas encore disponible au moment de la rédaction).
  • JSF 2.3 nécessite un minimum de Java 1.8, Servlet 3.0, EL 3.0 et CDI 1.2. Servlet 4.0 est facultatif et permettra à JSF 2.3 de servir les ressources via HTTP / 2 push. Lorsque <f:websocket> est utilisé, JSONP 1.1 est également requis. CDI 1.2 est explicitement requis en raison de la dépréciation de @ManagedBean.
  • JSF 2.2 nécessite un minimum de Java 1.6, Servlet 3.0 et EL 2.2. Servlet 3.0 est explicitement requis en raison du nouveau composant de téléchargement de fichiers qui utilise en interne l'API Servlet 3.0 standard sans avoir besoin de bibliothèques tierces.
  • JSF 2.1 nécessite un minimum de Java 1.5, Servlet 2.5 et EL 2.1. Servlet 3.0 est facultatif et permettra à JSF 2.1 de s'exécuter automatiquement sur *.jsf sans aucune configuration web.xml nécessaire tant qu'il y aura faces-config.xml.
  • JSF 2.0 nécessite un minimum de Java 1.5, Servlet 2.5 et EL 2.1. Vous pouvez utiliser Servlet 2.4 si vous fournissez votre propre API / implication EL 2.1.
  • JSF 1.2 nécessite un minimum de Java 1.5, Servlet 2.5, JSP 2.1 et EL 2.1. Si vous remplacez JSP 2.1 par Facelets 1.x comme technologie d'affichage par défaut, vous pouvez utiliser JSF 1.2 sur Servlet 2.4.
  • JSF 1.0 et 1.1 nécessite un minimum de Java 1.4, Servlet 2.4 et JSP 2.0.

Exemples de conteneurs Java EE et Servlet

  • Servlet 4.0: Tomcat 9.x, GlassFish / Payara 5.x
  • Servlet 3.1: Tomcat 8.x, WildFly 8/9/10 / 11.x, GlassFish / Payara 4.x, TomEE 7.x, WebSphere 9.x
  • Servlet 3.0: Tomcat 7.x, JBoss AS 6 / 7.x, GlassFish 3.x, TomEE 1.x, WebSphere 8.x
  • Servlet 2.5: Tomcat 6.x, JBoss AS 5.x, GlassFish 2.x, WebSphere 7.x
  • Servlet 2.4: Tomcat 5.5.x, JBoss AS 4.x, Sun Java Application Server, WebSphere 5 / 6.x

Installation de JSF

Selon le serveur utilisé, JSF peut déjà être intégré (conteneurs Java EE complets tels que WildFly, JBoss EAP, TomEE, Payara, GlassFish, WebSphere, etc.), ou non (conteneurs JSP / Servlet barebones tels que Tomcat, Jetty, etc.). Si le serveur n'est pas livré avec JSF intégré, vous devez installer manuellement une implémentation JSF à votre choix (Mojarra ou MyFaces). N'oubliez pas jstl, ces conteneurs JSP / Servlet barebones ne sont généralement pas non plus livrés avec JSTL.


Ressources

Tutoriels en ligne

Tutoriels hors ligne ("livres")

Implémentations JSF

  • Mojarra- Implémentation de référence (RI) d'Oracle, partie standard de par exemple WildFly
  • MyFaces- Alternative standard d'Apache, par exemple TomEE

Bibliothèques de composants / utilitaires JSF

  • PrimeFaces(showcase) - composant bibliothèque, basée sur jQuery + jQuery UI
  • OmniFaces(showcase) - bibliothèque d'utilitaires, compatible avec tout JSF bibliothèque de composants
  • RichFaces(showcase) - bibliothèque de composants, basée sur sur jQuery + UI personnalisé. (Fin de vie atteinte en juin 2016)
  • IceFaces(showcase ) - bibliothèque de composants, clone de PrimeFaces 2.x + quelques composants améliorés
  • Tomahawk - bibliothèque de composants, extensions de base du JSF standard, par exemple boutons radio sans table
  • Trinidad- bibliothèque de composants, extensions améliorées de JSF standard + JS / ajax personnalisé
  • OpenFaces(vitrine) - composant bibliothèque, basée sur JS / ajax personnalisé + interface utilisateur personnalisée
  • BootsFaces(showcase) - bibliothèque de composants, basé sur Bootstrap
  • ButterFaces- bibliothèque de composants, basée sur Bootstrap
  • AngularFaces- bibliothèque de composants comblant l'écart entre JSF et Angular
  • TornadoFaces- bibliothèque de composants avec une API de widget élégante prenant en charge les styles SASS

Questions fréquemment posées

Plus de liens:

Tags associés