David Mihura Eric Le Merdy JSF Java Server Faces Master 2 Pro GLR TER 21/04/2017 Plan Problématique Bref Historique Solution JSF Principes Mise en Œuvre des principes Quelques outils Bilan Conclusion 21/04/2017 JSF – Le Merdy Eric – Mihura David 2 Problématique Evolutions des besoins : Applications Web Problème : Comment concevoir une application Web de la même façon qu'une application traditionnelle Plusieurs solutions existent : WebForms : Microsoft Struts : Apache JSF : Sun 21/04/2017 JSF – Le Merdy Eric – Mihura David 3 Bref Historique Sun Open-source Microsoft 1996 1997 Servlet PHP,PERL,etc… ASP 1998 JSP MVC ASP.NET, WebForms 2000 2004 21/04/2017 Struts JSF Divergences d'approche selon les éditeurs. Plus grande séparation des concepts. JSF – Le Merdy Eric – Mihura David 4 Solution JSF Framework de création d’interfaces graphiques pour les applications Web 21/04/2017 JSF – Le Merdy Eric – Mihura David 5 Un concept en évolution Demande de spécification en Mai 2001 Plusieurs versions de spécifications Sun Plusieurs implémentations Final : 1.0 (début 2004) Maintenance : 1.1 (fin 2004) Référence (Sun) compatible 1.1 MyFaces (Apache) Ecruiser compatible 1.1 Une version 1.2 est en cours 21/04/2017 JSF – Le Merdy Eric – Mihura David 6 JSF et MVC Modèle : Couplé Vue : JSP à JSF par un Bean géré. + balises JSF Contrôleur : Servlet (FaceServlet) Règles définies dans un fichier xml 21/04/2017 JSF – Le Merdy Eric – Mihura David 7 Principes 21/04/2017 JSF – Le Merdy Eric – Mihura David 8 Principes : composants graphiques Fonctionnalité du composant définie dans la classe du composant Plusieurs rendus pour un même composant Possibilité de définir des rendus 21/04/2017 Etiquette Rendu h:command_button h:command_link JSF – Le Merdy Eric – Mihura David hyperlink 9 Principe : gérer des événements Chaque composant génère des événements (Events) Le serveur possède des écouteurs (Listeners) qui traitent les événements 21/04/2017 JSF – Le Merdy Eric – Mihura David 10 Principes : gestion de l’état des composants L’état peut changer chez le client entre 2 requêtes JSF prend en charge la gestion de cet état 21/04/2017 JSF – Le Merdy Eric – Mihura David 11 Exemple d’événements Gérer X Accepter EVENEMENT événement value_changed action Changement Enregistrement état formulaire 21/04/2017 JSF – Le Merdy Eric – Mihura David 12 Principes : validation et conversion Validation : Agit sur les composants graphiques (textfield) Personnalisation des validateurs (bornes, types, etc.) Lève des erreurs Conversion : Formatage des données Ex : 15000 → 15,000 Personnalisation possible 21/04/2017 JSF – Le Merdy Eric – Mihura David 13 Principes : navigation des pages Définitions de l’enchaînement des pages par un ensemble de règles de navigation 21/04/2017 JSF – Le Merdy Eric – Mihura David 14 Principes : internationalisation Possibilité de définir des locales Correspondance clé → valeur internationalisée useridLabel=Userid passwordLabel=Password loginSubmitLabel=Login 21/04/2017 useridLabel=Nom de l'Utilisateur passwordLabel=Mot de Passe loginSubmitLabel=Connectez JSF – Le Merdy Eric – Mihura David 15 Principes : balises JSF Rappels JSP: Page html qui peut contenir du code Java A l’exécution cette page est convertie en servlet Contient des balises JSP JSTL ( bibliothèque de balises standard pour java) JSF propose une bibliothèque de balises 21/04/2017 JSF – Le Merdy Eric – Mihura David 16 Mise en Œuvre des principes 21/04/2017 JSF – Le Merdy Eric – Mihura David 17 Etude de cas Une page de login Un seul utilisateur valide 3 pages : 21/04/2017 Authentification Accueil (si réussie) Erreur (sinon) JSF – Le Merdy Eric – Mihura David 18 1. Le bean du support Dans un package jsfLogin 21/04/2017 JSF – Le Merdy Eric – Mihura David 19 2. Déclaration du bean dans face-config.xml <managed-bean> <managed-bean-name>LoginServer</managed-bean-name> <managed-bean-class>jsflogin.loginServer</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> 21/04/2017 JSF – Le Merdy Eric – Mihura David 20 3. Création des pages Import des librairies <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> Ressources (internationalisation) <f:loadBundle basename="jsflogin.Resources" var="jsfloginBundle"/> Utilisation des balises <h:form id="loginForm"> <h:input_text id="userid" required="true" value="#{LoginServer.userid}" > <f:validate_length minimum="4" maximum="7" /> </h:input_text> <h:command_button id="submit" action="#{LoginServer.loginAction}" value="#{jsfloginBundle.loginSubmitLabel}"/> </h:form> 21/04/2017 JSF – Le Merdy Eric – Mihura David 21 4. Navigation des pages face-config.xml <navigation-rule> <from-view-id>/login.jsp</from-view-id> <navigation-case> <description>Handle case for successful login</description> <from-action>#{LoginServer.loginAction}</from-action> <from-outcome>success</from-outcome> <to-view-id>/success.jsp</to-view-id> </navigation-case> <navigation-case> <description>Handle case for unsuccessful login</description> <from-action>#{LoginServer.loginAction}</from-action> <from-outcome>failure</from-outcome> <to-view-id>/failure.jsp</to-view-id> </navigation-case> /login.jsp </navigation-rule> <navigation-rule> <from-view-id>/success.jsp</from-view-id> <navigation-case> <from-outcome>return</from-outcome> <to-view-id>/login.jsp</to-view-id> </navigation-case> </navigation-rule> 21/04/2017 JSF – Le Merdy Eric – Mihura David /success.jsp return success /failure.jsp failure 22 Quelques outils Java Studio Creator Plugin Eclipse : JSF Studio D’autres outils 21/04/2017 JSF – Le Merdy Eric – Mihura David 23 Java Studio Creator (1/3) Produit Sun Licence propriétaire IDE complet Serveur J2EE intégré Basé sur NetBeans Développement « à la souris » 21/04/2017 JSF – Le Merdy Eric – Mihura David 24 Java Studio Creator (2/3) Points forts Développement Tout rapide est intégré Points faibles Moins de maîtrise sur le code généré Entièrement Sun (forte dépendance) Produit jeune 21/04/2017 Manque de robustesse JSF – Le Merdy Eric – Mihura David 25 Java Studio Creator (3/3) 21/04/2017 JSF – Le Merdy Eric – Mihura David 26 Eclipse : JSF Studio (1/3) Plug-in propriétaire pour Eclipse Gère plusieurs serveurs d’application (Tomcat, JBoss, etc …) Perspective JSF Template de projets Editeur graphique pour le face-config Edition assistée de code JSP 21/04/2017 JSF – Le Merdy Eric – Mihura David 27 Eclipse : JSF Studio (2/3) Points forts: Puissance d’Eclipse Editeur JSP complet Indépendant du serveur Point faible Manque 21/04/2017 de performance JSF – Le Merdy Eric – Mihura David 28 Eclipse : JSF Studio (3/3) 21/04/2017 JSF – Le Merdy Eric – Mihura David 29 D’autres outils JSF MyEclipse WebFaces Faces console Standalone JDeveloper JBuilder NetBeans Eclipse 21/04/2017 JSF – Le Merdy Eric – Mihura David 30 Bilan JSF vs Struts Attentes respectées ? 21/04/2017 JSF – Le Merdy Eric – Mihura David 31 JSF vs Struts (1/3) Rappels Struts : Framework d’application Web Licence Apache Mêmes principes (MVC,fichier de navigation) Pas de spécifications formalisées 21/04/2017 JSF – Le Merdy Eric – Mihura David 32 JSF vs Struts (2/3) Struts est plus mature Meilleur facteur de confiance pour JSF (Ex: support IBM pour WebSphere) Struts contraint le modèle, JSF est plus flexible 21/04/2017 JSF – Le Merdy Eric – Mihura David 33 JSF vs Struts (3/3) La vue est plus générique dans JSF grâce à sa conception des composants JSF est plus extensible Balises personnalisés Composants personnalisés Conclusion : JSF 21/04/2017 a su tirer expérience de Struts JSF – Le Merdy Eric – Mihura David 34 Attentes respectées (1/2) JSF est-il une bonne solution ? Standardisé Règles de navigation Mise en œuvre des composants graphiques 21/04/2017 Approche RAD JSF – Le Merdy Eric – Mihura David 35 Attentes respectées (2/2) MVC Modèle indépendant Séparation du comportement et du rendu Approche page du contrôleur : spécifique aux applications Web 21/04/2017 JSF – Le Merdy Eric – Mihura David 36 Conclusion 21/04/2017 JSF – Le Merdy Eric – Mihura David 37 Le futur de ce Framework Intégration de JSF 1.2 à la future spécification J2EE 5.0 Participation de l’industrie à la spécification Pas de conversion Struts → JSF Adoption de JSF pour les nouveaux projets 21/04/2017 JSF – Le Merdy Eric – Mihura David 38