JavaServer Faces  JS Bournival 18 juillet 2007
Agenda Introduction Historique Architecture Concepts clés Cycle de vie d’une requête Expression language Traction dans l’industrie Références Questions
JavaServer Faces? JSF est la spécification d’un cadre d’application pour la couche de présentation d’une application web.  JSF fait partie, aussi de la spécification globale de JEE 5. JSR 127 : spécification initiale résultant en l’implémentation de JavaServer Faces 1.1 JSR 252 : spécification de JSF 1.2, corrigeant plusieurs problèmes, et ajoutant certaines nouvelles fonctionnalités JSR 314 : spécification de JSF 2.0 … à suivre.
Buts recherchés et Historique RAD Rapid Application Development RIA Rich Internet Application Permettre, pour les développeurs, de facilement lier, dans un contexte  stateful , des composants  backend , avec des évènements émanant de l’interface-utilisateur.
Buts recherchés et Historique …  it is also aimed directly at solving many of the common problems encountered when  writing applications for HTML clients  that communicate via HTTP  […]  These applications are typically form-based, and are comprised of one or more HTML pages with which the user interacts to complete a task or set of tasks. Craig McClanahan, Ed Burns, & Roger Kitain Java Specification Request (JSR) 127 " "
Architecture vue d’en haut
Niveaux d'abstractions
Les concepts clé Les 8 éléments à maîtriser dans JSF UICOMPONENT RENDERER VALIDATOR BACKING BEANS CONVERTER EVENTS & LISTENERS MESSAGES NAVIGATION
Les concepts clé (1/8) UICOMPONENT Abstraction et encapsulation de fonctionnalités pour un composant possédant un état, et une représentation graphique
Les concepts clé (2/8) RENDERER renderer par défaut: HTML 4.01 direct implementation model VS. delegated implementation model Organisé render kits
Les concepts clé (5/8) CONVERTER prend en charge encoding-decoding converters  de base fournis par JSF <f:convertNumber /> <f:convertDateTime /> <h:inputText value=&quot;#{user.balance}&quot;> <f:convertNumber type=&quot;currency&quot; currencyCode=&quot;KZT&quot;/> </h:inputText> <h:inputText value=&quot;#{user.dateOfBirth}&quot;> <f:convertDateTime pattern=&quot;MM/dd/yyyy (hh:mm a)&quot;/> </h:inputText> Petits exemples boboches mais qui disent tout:
Les concepts clé (3/8) VALIDATOR directement dans l'implémentation du composant via une méthode d'une  backing bean via une classe validateur générique <h:inputText value=&quot;#{user.name}&quot;> <f:validateLength  minimum=“13&quot;/> </h:inputText> <h:inputText value=&quot;#{user.creditCard}&quot;> <f:validator validatorId=“com.nurun.CreditCardValidator&quot;/> </h:inputText>
Les concepts clé (4/8) BACKING BEANS Lier la valeur d'un composant à un attribut d'une  backing bean Attacher un composant à un attribut d'une  backing bean Déclaration dans le fichier de configuration de JSF Lien avec composantes d'affaires ( EJB3 ,  Spring ) Niveau de portée Application, Session ou Requête <h:commandButton action= “#{myBean.faitKekchose}“ …  />
Les concepts clé (6/8) EVENTS & LISTENERS Types value change events action events data model events phase events Les  listeners  sont appelés lors de la soumission Peut se présenter sous la forme d’une classe, ou simplement d’une méthode d’une  backing bean <h:inputText value=&quot;#{myBean.name}&quot;  valueChangeListener=&quot;#{myBean.react}&quot;  /> Petit exemple:
Les concepts clé (7/8) MESSAGES Erreurs d'application, ou de validation Composants pouvant ajouter des messages Rien de très magique ici, se compare aisément aux tags du style  <html:errors/>  de  Struts FacesContext context = FacesContet.getCurrentInstance(); context.addMessage(null,  new FacesMessage( &quot; blah.&quot;) ; <h:messages style= “color: blue“ /> Dans la vue: Dans la  backing bean :
Les concepts clé (8/8) NAVIGATION Déclaration des règles de navigation dans le fichier de configuration de JSF,  faces-config.xml Basé sur des  outcome  sous la forme de chaîne de caractères Rien de nouveau ici pour les habitués de  Struts <navigation-rule> <from-view-id> /welcome.jsp </from-view-id> <navigation-case> <from-outcome> success </from-outcome> <to-view-id> /response.jsp </to-view-id> </navigation-case> </navigation-rule> Exemple dans faces-config.xml:
Le cycle de vie d'une requête 6 phases forment le cycle de vie d’une requête JSF
Le cycle de vie d'une requête (1/6) Restore View Construction ou mise à jour de l'arbre logique de composants <input type=&quot;hidden&quot; name=&quot;com.sun.faces.VIEW&quot; value=&quot; H4sIAAAAAAAAAMVaa2wcVxW+u347bmsnKXk1zTYPN2ncfT/zaOvYeayyboLXSYkjcMYzd+2NZ2emM7P2uFGiFNGCqIRAJRVIASrBj/4of0AI1B+8UWlQi4jgByCkCBVFlSgI/pSHoJx757m7d8axHZxVMp5799x7zz3fOd8599qvv486NBVFeLkW1epStMLxWIvW9aoYnVAxLutqndfrKt5Y2Tb60LULkTBqL6FufrYqCiqWdPRg6SI3z8XIgNiwqnKLpaqmHyyhHl7kNO1proZ1tN6UETlpJgYTVqUZEOgkK+majjZ4ZjjBabNjnAJfh6vCs+gKChsKaLeBSJhKOWsYz9/c/uU3ua+0oVARtWvV57ChIITaFtrh2auRwUjR0T4y1LC2BZtUZAnUjs7qNTF6Ah6n6rpS1yewoYNw+1RVyDhD98jqTJS7yBnpi1qFvrjDhqFV1jm9rlnDsuYw+uwADdob9CDPbkuyECipo/QSGpexiHn9iCyLmJNGZjE/Ny0bYKQB10iWGT/htq+T3Z+btq7RzHpiKq7McZDjFgE2XE2vUynKJ7 … == &quot; />
Le cycle de vie d'une requête 6 phases forment le cycle de vie d’une requête JSF
Le cycle de vie d'une requête (2/6) Apply Request Values Insertion des valeurs dans chacun des composants de l'arbre POST /path/view.faces HTTP/1.0 From: someone@somewhere.com User-Agent: HTTPTool/1.0 Content-Type: application/x-www-form-urlencoded Content-Length: 32 Myform:mycomponent=bonhomme+carnaval&  … HTTP POST request
Le cycle de vie d'une requête 6 phases forment le cycle de vie d’une requête JSF
Le cycle de vie d'une requête (3/6) Process Validations JSF demande à chacun des composants de se convertir et de se valider (validateur externes etc.) X
Le cycle de vie d'une requête 6 phases forment le cycle de vie d’une requête JSF
Le cycle de vie d'une requête (4/6) Update Model Values Insertion des valeurs dans le modèle ( backing bean  et autres objets du modèle)
Le cycle de vie d'une requête 6 phases forment le cycle de vie d’une requête JSF
Le cycle de vie d'une requête (5/6) Invoke Application Exécute la méthode  action  (ou autre  listener  enregistré) appelé par l'évènement par défaut déclenché par les composants de type « command » (lien ou bouton)
Le cycle de vie d'une requête 6 phases forment le cycle de vie d’une requête JSF
Le cycle de vie d'une requête (6/6) Render Response Affiche la réponse en mettant à contribution le mécanisme de vue utilisé (JSP, Facelets)
JSF EL EL ==  Expression Language Sont sous la forme  #{…} Permet de  dynamiquement manipuler les attributs des  backing beans  ou objets du domaine, ou encore d'exécuter des opérations simples sans polluer une vue avec des  scriplets  qui s'intègre mal. Similaires à JSP/JSTL  ${…} Ces expressions sont évalués à l'exécution de la page
JSF EL (suite …) On peut utiliser le langage d'expression de JSF pour: Insérer des composants dans des objets; Exposer les propriétés d'une JavaBean, d'une Collection, ou de types simples; Référencer des méthodes (action, listener, validation, …); Exécuter des opérations logiques ou mathématiques; En plus, sont supportées les propriétés imbriquées.
JSF EL (suite …) value-binding method-binding Pour un  listener Pour une action Pour un  validator Pour un  converter
Les composants standards de JSF
Implémentations de la spécification Sun RI 1.2 Apache MyFaces 1.1 (1.2 pas encore release)
Librairies de composants Oracle ADF Faces ICEFaces JBoss RichFaces JBoss Ajax4JSF Apache Tomahawk Apache Sandbox Apache Trinidad And many more … + +
Outils Eclipse JSF Tools (WTP 2.0) IBM RAD NetBeans Sun Java Studio Creator RHDS / Exadel MyEclipse IDE Oracle JDeveloper BEA Workshop for JSF + +
Références Livres JavaServer Faces in Action Core JSF Sites Webs JCP.org JSR 127 JCP.org JSR 252 jsfcentral.com Blogs Kito Mann ( http://weblogs.java.net/blog/kito75/) Ed Burns ( http://weblogs.java.net/blog/edburns/) Craig Mclanahan ( http://blogs.sun.com/craigmcc/)
Questions? [email_address] Ext. 2112

Présentation de JavaServer Faces

  • 1.
    JavaServer Faces JS Bournival 18 juillet 2007
  • 2.
    Agenda Introduction HistoriqueArchitecture Concepts clés Cycle de vie d’une requête Expression language Traction dans l’industrie Références Questions
  • 3.
    JavaServer Faces? JSFest la spécification d’un cadre d’application pour la couche de présentation d’une application web. JSF fait partie, aussi de la spécification globale de JEE 5. JSR 127 : spécification initiale résultant en l’implémentation de JavaServer Faces 1.1 JSR 252 : spécification de JSF 1.2, corrigeant plusieurs problèmes, et ajoutant certaines nouvelles fonctionnalités JSR 314 : spécification de JSF 2.0 … à suivre.
  • 4.
    Buts recherchés etHistorique RAD Rapid Application Development RIA Rich Internet Application Permettre, pour les développeurs, de facilement lier, dans un contexte stateful , des composants backend , avec des évènements émanant de l’interface-utilisateur.
  • 5.
    Buts recherchés etHistorique … it is also aimed directly at solving many of the common problems encountered when writing applications for HTML clients that communicate via HTTP […] These applications are typically form-based, and are comprised of one or more HTML pages with which the user interacts to complete a task or set of tasks. Craig McClanahan, Ed Burns, & Roger Kitain Java Specification Request (JSR) 127 &quot; &quot;
  • 6.
  • 7.
  • 8.
    Les concepts cléLes 8 éléments à maîtriser dans JSF UICOMPONENT RENDERER VALIDATOR BACKING BEANS CONVERTER EVENTS & LISTENERS MESSAGES NAVIGATION
  • 9.
    Les concepts clé(1/8) UICOMPONENT Abstraction et encapsulation de fonctionnalités pour un composant possédant un état, et une représentation graphique
  • 10.
    Les concepts clé(2/8) RENDERER renderer par défaut: HTML 4.01 direct implementation model VS. delegated implementation model Organisé render kits
  • 11.
    Les concepts clé(5/8) CONVERTER prend en charge encoding-decoding converters de base fournis par JSF <f:convertNumber /> <f:convertDateTime /> <h:inputText value=&quot;#{user.balance}&quot;> <f:convertNumber type=&quot;currency&quot; currencyCode=&quot;KZT&quot;/> </h:inputText> <h:inputText value=&quot;#{user.dateOfBirth}&quot;> <f:convertDateTime pattern=&quot;MM/dd/yyyy (hh:mm a)&quot;/> </h:inputText> Petits exemples boboches mais qui disent tout:
  • 12.
    Les concepts clé(3/8) VALIDATOR directement dans l'implémentation du composant via une méthode d'une backing bean via une classe validateur générique <h:inputText value=&quot;#{user.name}&quot;> <f:validateLength minimum=“13&quot;/> </h:inputText> <h:inputText value=&quot;#{user.creditCard}&quot;> <f:validator validatorId=“com.nurun.CreditCardValidator&quot;/> </h:inputText>
  • 13.
    Les concepts clé(4/8) BACKING BEANS Lier la valeur d'un composant à un attribut d'une backing bean Attacher un composant à un attribut d'une backing bean Déclaration dans le fichier de configuration de JSF Lien avec composantes d'affaires ( EJB3 , Spring ) Niveau de portée Application, Session ou Requête <h:commandButton action= “#{myBean.faitKekchose}“ … />
  • 14.
    Les concepts clé(6/8) EVENTS & LISTENERS Types value change events action events data model events phase events Les listeners sont appelés lors de la soumission Peut se présenter sous la forme d’une classe, ou simplement d’une méthode d’une backing bean <h:inputText value=&quot;#{myBean.name}&quot; valueChangeListener=&quot;#{myBean.react}&quot; /> Petit exemple:
  • 15.
    Les concepts clé(7/8) MESSAGES Erreurs d'application, ou de validation Composants pouvant ajouter des messages Rien de très magique ici, se compare aisément aux tags du style <html:errors/> de Struts FacesContext context = FacesContet.getCurrentInstance(); context.addMessage(null, new FacesMessage( &quot; blah.&quot;) ; <h:messages style= “color: blue“ /> Dans la vue: Dans la backing bean :
  • 16.
    Les concepts clé(8/8) NAVIGATION Déclaration des règles de navigation dans le fichier de configuration de JSF, faces-config.xml Basé sur des outcome sous la forme de chaîne de caractères Rien de nouveau ici pour les habitués de Struts <navigation-rule> <from-view-id> /welcome.jsp </from-view-id> <navigation-case> <from-outcome> success </from-outcome> <to-view-id> /response.jsp </to-view-id> </navigation-case> </navigation-rule> Exemple dans faces-config.xml:
  • 17.
    Le cycle devie d'une requête 6 phases forment le cycle de vie d’une requête JSF
  • 18.
    Le cycle devie d'une requête (1/6) Restore View Construction ou mise à jour de l'arbre logique de composants <input type=&quot;hidden&quot; name=&quot;com.sun.faces.VIEW&quot; value=&quot; H4sIAAAAAAAAAMVaa2wcVxW+u347bmsnKXk1zTYPN2ncfT/zaOvYeayyboLXSYkjcMYzd+2NZ2emM7P2uFGiFNGCqIRAJRVIASrBj/4of0AI1B+8UWlQi4jgByCkCBVFlSgI/pSHoJx757m7d8axHZxVMp5799x7zz3fOd8599qvv486NBVFeLkW1epStMLxWIvW9aoYnVAxLutqndfrKt5Y2Tb60LULkTBqL6FufrYqCiqWdPRg6SI3z8XIgNiwqnKLpaqmHyyhHl7kNO1proZ1tN6UETlpJgYTVqUZEOgkK+majjZ4ZjjBabNjnAJfh6vCs+gKChsKaLeBSJhKOWsYz9/c/uU3ua+0oVARtWvV57ChIITaFtrh2auRwUjR0T4y1LC2BZtUZAnUjs7qNTF6Ah6n6rpS1yewoYNw+1RVyDhD98jqTJS7yBnpi1qFvrjDhqFV1jm9rlnDsuYw+uwADdob9CDPbkuyECipo/QSGpexiHn9iCyLmJNGZjE/Ny0bYKQB10iWGT/htq+T3Z+btq7RzHpiKq7McZDjFgE2XE2vUynKJ7 … == &quot; />
  • 19.
    Le cycle devie d'une requête 6 phases forment le cycle de vie d’une requête JSF
  • 20.
    Le cycle devie d'une requête (2/6) Apply Request Values Insertion des valeurs dans chacun des composants de l'arbre POST /path/view.faces HTTP/1.0 From: someone@somewhere.com User-Agent: HTTPTool/1.0 Content-Type: application/x-www-form-urlencoded Content-Length: 32 Myform:mycomponent=bonhomme+carnaval& … HTTP POST request
  • 21.
    Le cycle devie d'une requête 6 phases forment le cycle de vie d’une requête JSF
  • 22.
    Le cycle devie d'une requête (3/6) Process Validations JSF demande à chacun des composants de se convertir et de se valider (validateur externes etc.) X
  • 23.
    Le cycle devie d'une requête 6 phases forment le cycle de vie d’une requête JSF
  • 24.
    Le cycle devie d'une requête (4/6) Update Model Values Insertion des valeurs dans le modèle ( backing bean et autres objets du modèle)
  • 25.
    Le cycle devie d'une requête 6 phases forment le cycle de vie d’une requête JSF
  • 26.
    Le cycle devie d'une requête (5/6) Invoke Application Exécute la méthode action (ou autre listener enregistré) appelé par l'évènement par défaut déclenché par les composants de type « command » (lien ou bouton)
  • 27.
    Le cycle devie d'une requête 6 phases forment le cycle de vie d’une requête JSF
  • 28.
    Le cycle devie d'une requête (6/6) Render Response Affiche la réponse en mettant à contribution le mécanisme de vue utilisé (JSP, Facelets)
  • 29.
    JSF EL EL== Expression Language Sont sous la forme #{…} Permet de dynamiquement manipuler les attributs des backing beans ou objets du domaine, ou encore d'exécuter des opérations simples sans polluer une vue avec des scriplets qui s'intègre mal. Similaires à JSP/JSTL ${…} Ces expressions sont évalués à l'exécution de la page
  • 30.
    JSF EL (suite…) On peut utiliser le langage d'expression de JSF pour: Insérer des composants dans des objets; Exposer les propriétés d'une JavaBean, d'une Collection, ou de types simples; Référencer des méthodes (action, listener, validation, …); Exécuter des opérations logiques ou mathématiques; En plus, sont supportées les propriétés imbriquées.
  • 31.
    JSF EL (suite…) value-binding method-binding Pour un listener Pour une action Pour un validator Pour un converter
  • 32.
  • 33.
    Implémentations de laspécification Sun RI 1.2 Apache MyFaces 1.1 (1.2 pas encore release)
  • 34.
    Librairies de composantsOracle ADF Faces ICEFaces JBoss RichFaces JBoss Ajax4JSF Apache Tomahawk Apache Sandbox Apache Trinidad And many more … + +
  • 35.
    Outils Eclipse JSFTools (WTP 2.0) IBM RAD NetBeans Sun Java Studio Creator RHDS / Exadel MyEclipse IDE Oracle JDeveloper BEA Workshop for JSF + +
  • 36.
    Références Livres JavaServerFaces in Action Core JSF Sites Webs JCP.org JSR 127 JCP.org JSR 252 jsfcentral.com Blogs Kito Mann ( http://weblogs.java.net/blog/kito75/) Ed Burns ( http://weblogs.java.net/blog/edburns/) Craig Mclanahan ( http://blogs.sun.com/craigmcc/)
  • 37.