Prsentation de-javaserver-faces4124

579 vues

Publié le

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
579
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2
Actions
Partages
0
Téléchargements
40
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Prsentation de-javaserver-faces4124

  1. 1. JavaServer Faces JS Bournival 18 juillet 2007
  2. 2. Agenda <ul><li>Introduction </li></ul><ul><li>Historique </li></ul><ul><li>Architecture </li></ul><ul><li>Concepts clés </li></ul><ul><li>Cycle de vie d’une requête </li></ul><ul><li>Expression language </li></ul><ul><li>Traction dans l’industrie </li></ul><ul><li>Références </li></ul><ul><li>Questions </li></ul>
  3. 3. JavaServer Faces? <ul><li>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. </li></ul><ul><ul><ul><ul><ul><li>JSR 127 : spécification initiale résultant en l’implémentation de JavaServer Faces 1.1 </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>JSR 252 : spécification de JSF 1.2, corrigeant plusieurs problèmes, et ajoutant certaines nouvelles fonctionnalités </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>JSR 314 : spécification de JSF 2.0 … à suivre. </li></ul></ul></ul></ul></ul>
  4. 4. Buts recherchés et Historique <ul><li>RAD </li></ul><ul><ul><li>Rapid Application Development </li></ul></ul><ul><li>RIA </li></ul><ul><ul><li>Rich Internet Application </li></ul></ul><ul><li>Permettre, pour les développeurs, de facilement lier, dans un contexte stateful , des composants backend , avec des évènements émanant de l’interface-utilisateur. </li></ul>
  5. 5. Buts recherchés et Historique <ul><ul><ul><li>… 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. </li></ul></ul></ul><ul><ul><ul><li>Craig McClanahan, Ed Burns, & Roger Kitain </li></ul></ul></ul><ul><ul><ul><ul><li>Java Specification Request (JSR) 127 </li></ul></ul></ul></ul>&quot; &quot;
  6. 6. Architecture vue d’en haut
  7. 7. Niveaux d'abstractions
  8. 8. Les concepts clé <ul><li>Les 8 éléments à maîtriser dans JSF </li></ul><ul><ul><li>UICOMPONENT </li></ul></ul><ul><ul><li>RENDERER </li></ul></ul><ul><ul><li>VALIDATOR </li></ul></ul><ul><ul><li>BACKING BEANS </li></ul></ul><ul><ul><li>CONVERTER </li></ul></ul><ul><ul><li>EVENTS & LISTENERS </li></ul></ul><ul><ul><li>MESSAGES </li></ul></ul><ul><ul><li>NAVIGATION </li></ul></ul>
  9. 9. Les concepts clé (1/8) <ul><li>UICOMPONENT </li></ul><ul><ul><li>Abstraction et encapsulation de fonctionnalités pour un composant possédant un état, et une représentation graphique </li></ul></ul>
  10. 10. Les concepts clé (2/8) <ul><li>RENDERER </li></ul><ul><ul><li>renderer par défaut: HTML 4.01 </li></ul></ul><ul><ul><li>direct implementation model VS. delegated implementation model </li></ul></ul><ul><ul><li>Organisé render kits </li></ul></ul>
  11. 11. Les concepts clé (5/8) <ul><li>CONVERTER </li></ul><ul><ul><li>prend en charge encoding-decoding </li></ul></ul><ul><ul><li>converters de base fournis par JSF </li></ul></ul><ul><ul><ul><li><f:convertNumber /> </li></ul></ul></ul><ul><ul><ul><li><f:convertDateTime /> </li></ul></ul></ul><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. 12. Les concepts clé (3/8) <ul><li>VALIDATOR </li></ul><ul><ul><li>directement dans l'implémentation du composant </li></ul></ul><ul><ul><li>via une méthode d'une backing bean </li></ul></ul><ul><ul><li>via une classe validateur générique </li></ul></ul><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. 13. Les concepts clé (4/8) <ul><li>BACKING BEANS </li></ul><ul><ul><li>Lier la valeur d'un composant à un attribut d'une backing bean </li></ul></ul><ul><ul><li>Attacher un composant à un attribut d'une backing bean </li></ul></ul><ul><ul><li>Déclaration dans le fichier de configuration de JSF </li></ul></ul><ul><ul><li>Lien avec composantes d'affaires ( EJB3 , Spring ) </li></ul></ul><ul><ul><li>Niveau de portée Application, Session ou Requête </li></ul></ul><h:commandButton action= “#{myBean.faitKekchose}“ … />
  14. 14. Les concepts clé (6/8) <ul><li>EVENTS & LISTENERS </li></ul><ul><ul><li>Types </li></ul></ul><ul><ul><ul><li>value change events </li></ul></ul></ul><ul><ul><ul><li>action events </li></ul></ul></ul><ul><ul><ul><li>data model events </li></ul></ul></ul><ul><ul><ul><li>phase events </li></ul></ul></ul><ul><ul><li>Les listeners sont appelés lors de la soumission </li></ul></ul><ul><ul><li>Peut se présenter sous la forme d’une classe, ou simplement d’une méthode d’une backing bean </li></ul></ul><h:inputText value=&quot;#{myBean.name}&quot; valueChangeListener=&quot;#{myBean.react}&quot; /> Petit exemple:
  15. 15. Les concepts clé (7/8) <ul><li>MESSAGES </li></ul><ul><ul><li>Erreurs d'application, ou de validation </li></ul></ul><ul><ul><li>Composants pouvant ajouter des messages </li></ul></ul><ul><ul><li>Rien de très magique ici, se compare aisément aux tags du style <html:errors/> de Struts </li></ul></ul>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. 16. Les concepts clé (8/8) <ul><li>NAVIGATION </li></ul><ul><ul><li>Déclaration des règles de navigation dans le fichier de configuration de JSF, faces-config.xml </li></ul></ul><ul><ul><li>Basé sur des outcome sous la forme de chaîne de caractères </li></ul></ul><ul><ul><li>Rien de nouveau ici pour les habitués de Struts </li></ul></ul><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. 17. Le cycle de vie d'une requête <ul><li>6 phases forment le cycle de vie d’une requête JSF </li></ul>
  18. 18. Le cycle de vie d'une requête (1/6) <ul><li>Restore View </li></ul><ul><ul><li>Construction ou mise à jour de l'arbre logique de composants </li></ul></ul><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. 19. Le cycle de vie d'une requête <ul><li>6 phases forment le cycle de vie d’une requête JSF </li></ul>
  20. 20. Le cycle de vie d'une requête (2/6) <ul><li>Apply Request Values </li></ul><ul><ul><li>Insertion des valeurs dans chacun des composants de l'arbre </li></ul></ul>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. 21. Le cycle de vie d'une requête <ul><li>6 phases forment le cycle de vie d’une requête JSF </li></ul>
  22. 22. Le cycle de vie d'une requête (3/6) <ul><li>Process Validations </li></ul><ul><ul><li>JSF demande à chacun des composants de se convertir et de se valider (validateur externes etc.) </li></ul></ul>X
  23. 23. Le cycle de vie d'une requête <ul><li>6 phases forment le cycle de vie d’une requête JSF </li></ul>
  24. 24. Le cycle de vie d'une requête (4/6) <ul><li>Update Model Values </li></ul><ul><ul><li>Insertion des valeurs dans le modèle ( backing bean et autres objets du modèle) </li></ul></ul>
  25. 25. Le cycle de vie d'une requête <ul><li>6 phases forment le cycle de vie d’une requête JSF </li></ul>
  26. 26. Le cycle de vie d'une requête (5/6) <ul><li>Invoke Application </li></ul><ul><ul><li>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) </li></ul></ul>
  27. 27. Le cycle de vie d'une requête <ul><li>6 phases forment le cycle de vie d’une requête JSF </li></ul>
  28. 28. Le cycle de vie d'une requête (6/6) <ul><li>Render Response </li></ul><ul><ul><li>Affiche la réponse en mettant à contribution le mécanisme de vue utilisé (JSP, Facelets) </li></ul></ul>
  29. 29. JSF EL <ul><li>EL == Expression Language </li></ul><ul><li>Sont sous la forme #{…} </li></ul><ul><li>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. </li></ul><ul><li>Similaires à JSP/JSTL ${…} </li></ul><ul><li>Ces expressions sont évalués à l'exécution de la page </li></ul>
  30. 30. JSF EL (suite …) <ul><li>On peut utiliser le langage d'expression de JSF pour: </li></ul><ul><ul><li>Insérer des composants dans des objets; </li></ul></ul><ul><ul><li>Exposer les propriétés d'une JavaBean, d'une Collection, ou de types simples; </li></ul></ul><ul><ul><li>Référencer des méthodes (action, listener, validation, …); </li></ul></ul><ul><ul><li>Exécuter des opérations logiques ou mathématiques; </li></ul></ul><ul><ul><li>En plus, sont supportées les propriétés imbriquées. </li></ul></ul>
  31. 31. JSF EL (suite …) <ul><li>value-binding </li></ul><ul><li>method-binding </li></ul><ul><ul><li>Pour un listener </li></ul></ul><ul><ul><li>Pour une action </li></ul></ul><ul><ul><li>Pour un validator </li></ul></ul><ul><ul><li>Pour un converter </li></ul></ul>
  32. 32. Les composants standards de JSF
  33. 33. Implémentations de la spécification <ul><li>Sun RI </li></ul><ul><ul><li>1.2 </li></ul></ul><ul><li>Apache MyFaces </li></ul><ul><ul><li>1.1 (1.2 pas encore release) </li></ul></ul>
  34. 34. Librairies de composants <ul><li>Oracle ADF Faces </li></ul><ul><li>ICEFaces </li></ul><ul><li>JBoss RichFaces </li></ul><ul><li>JBoss Ajax4JSF </li></ul><ul><li>Apache Tomahawk </li></ul><ul><li>Apache Sandbox </li></ul><ul><li>Apache Trinidad </li></ul><ul><li>And many more … </li></ul>+ +
  35. 35. Outils <ul><li>Eclipse JSF Tools (WTP 2.0) </li></ul><ul><li>IBM RAD </li></ul><ul><li>NetBeans </li></ul><ul><li>Sun Java Studio Creator </li></ul><ul><li>RHDS / Exadel </li></ul><ul><li>MyEclipse IDE </li></ul><ul><li>Oracle JDeveloper </li></ul><ul><li>BEA Workshop for JSF </li></ul>+ +
  36. 36. Références <ul><li>Livres </li></ul><ul><ul><li>JavaServer Faces in Action </li></ul></ul><ul><ul><li>Core JSF </li></ul></ul><ul><li>Sites Webs </li></ul><ul><ul><li>JCP.org JSR 127 </li></ul></ul><ul><ul><li>JCP.org JSR 252 </li></ul></ul><ul><ul><li>jsfcentral.com </li></ul></ul><ul><li>Blogs </li></ul><ul><ul><li>Kito Mann ( http://weblogs.java.net/blog/kito75/) </li></ul></ul><ul><ul><li>Ed Burns ( http://weblogs.java.net/blog/edburns/) </li></ul></ul><ul><ul><li>Craig Mclanahan ( http://blogs.sun.com/craigmcc/) </li></ul></ul>
  37. 37. <ul><li>Questions? </li></ul><ul><li>[email_address] </li></ul><ul><li>Ext. 2112 </li></ul>

×