JSF2 (JSR 314) , les nouveautés
JSF ou Java server Faces est le framework java de présentation web présent dans la version actuelle de JavaEE 5, et le sera également dans la prochaine version de javaEE 6 qui devrait sortir courant juin 2009. JSF était en version 1.2 (JSR 252) pour JAVAEE 5 et la prochaine version, JSF 2 (JSR 314) fera partie de javaEE6. A cette fin, ce framework a eu droit à une nouvelle version majeure, et donc, s’est vu dôté de nouvelles fonctionnalités. Cet article a but de vous faire une présentation rapide des nouveautés de JSF2. Je reviendrais plus en détail sur les nouveautés un peu plus tard.
JSF 2 est la plus important mise à jour depuis sa création, il propose désormais :
- Support ajax natif,
- gestions des ressources,
- Page Declaration Language et création de composants facilité (ezcomp),
- Davantage de scopes,
- Configuration facilitée,
Configuration facilitée
L’utilisation des annotation permet avec JSF2 de considérablement simplifier sa configuration. Il n’est même plus nécessaire d’avoir un faces-config dans votre projet Web.
Quelques unes des annotation ajoutées :
- @ManagedBean,
- @SessionScoped,
- @RequestScoped,
- @ViewScoped ...
Support ajax natif
De nos jours, une application web se doit d’offrir une interface riche et réactive. Cette réactivité s’obtient en ne mettant à jour que de petites portions de la page. Les versions précédentes de JSF ne proposaient aucune solution native. Des librairies tierces telles que a4jsf comblaient cette lacune en apportant leur propre solution.
Ceci au prix d’un alourdissement du code html généré et selon l’utilisation qui en est faite, au détriment des performances. JSF 2 apporte sa propre solution native.
Afin d’intégrer ajax dans vos pages, il faut dans un premier temps ajouter la ressource javascript ajax.js présente dans la librairie jsf-api.jar avec la ligne suivante :
<h:outputAjaxScript target="head" />
Vous pouvez ensuite l’utiliser dans vos formulaires en ajoutant sur un commandButton les attributs suivants :
onclick="jsf.ajax.request(this, event, {execute:'this, inputComponent1,inputComponent1,',render:'tableListContact'});
actionListener="#{contactBean.doCreateContact}"
Les valeurs des composants inputComponent1 et inputComponent2 seront transmises côté serveur .
En appelant FacesContext.isAjaxRequest() le serveur peut savoir si la requête qui lui est adressée est partielle ou complète. Si c’est une requête partielle (ajax), le serveur va alors consulter la liste des composants devant être mis à jour côté serveur. Les traitements et le rendu (Différentes phases du cylce de vie) ne seront effectués que sur les composants passée en références.
Si les données sont valides, la liste des contacts se verra finalement enrichie d’un nouveau membre.
Page Declaration Language (PDL)
PDL est basé sur facelets
Celui-ci fourni une méthode simple pour factoriser des morceaux de pages en éléments réutilisables et configurable : les templates. La définition d’un template est très ressemblante à celle d’un composant JSF, il est d’ailleurs très facile de réaliser des composants avec facelets, le tout sans écrire la moindre ligne de code java.
Pour les adeptes de xsl, la création d’un template avec facelets est très proche de la façon de le faire avec XSL, de la même façon, vous pouvez passer des paramètres à ce template.
Une page JSP sera compilée en une servlet, alors qu’un template facelets sera directement buildé en un arbre de composant correspondants (fonctionnement natif de JSF)
Gestions des ressources
Une ressource telle que la concoit JSF est un élément statique qui sera transmise pour être affichée ou traitée par le navigateur du client. Cela peut être une image, un script javascript, une feuille de style CSS. Une ressource est définie par :
- library,
- name,
- version,
- locale (Vous pouvez donc avoir des ressources localisées)
Précédemment dans JSF, lorsque vous vouliez mettre à disposition une ressource, vous deviez passer par le répertoire WEB-INF, afin que le navigateur client puisse y accéder, et si vous souhaitiez la mettre à jour, il fallait remplacer le fichier. Avec JSF 2.0, c’est fini, vous fournissez vos ressources directement par le biais d’un jar. Plus besoin de passer par une servlet filter. Les jars étant versionnés, il est facile d’effectuer une montée de version afin de passer des correctifs par exemple.
Afin de mettre à disposition une ressource dans un jar il faut la disposer sous /resources ou /META-INF/resources
Davantage de scope
Un nouveau scope a été ajouté, viewScope, ce qui donne au managedBean associé une durée de vie identique à celle de la view (une view peut s’étaler sur plusieurs requêtes), mais dès que vous changez de view, les données ne seront plus maintenues.
Conclusion
Même si JSF2 ne changera pas beaucoup votre façon de coder des pages web en java, il vous simplifiera la vie, par l’intégration des frameworks actuels qui étendent JSF 1.X.
De plus, lorsque vous coderez votre première page avec JSF2, vous pourrez déjà réaliser quelques pages web avant de commencer à devoir l’aller chercher des librairies tierces.
Et pour finir, la facilité avec laquelle l’on peut créer des composants en JSF2 est telle que je suis sur que nous allons voir arriver beaucoup de nouvelles librairies arriver sur le marché (openSource ou non)
En savoir +
Si vous souhaitez en savoir +, je vous invite à surveiller la sortie du livre d’Antonio Goncalves :
http://www.apress.com/book/view/1430219548
Références :
- http://weblogs.java.net/blog/edburns/
- http://weblogs.java.net/blog/driscoll/
- http://in.relation.to/10463.lace
- Liste de librairies tierces : http://www.jsfmatrix.net/
Aucun trackbacks pour l'instant
25 mars 2009 - 07:55
Pour info, Java EE 6 est reporté à septembre 2009
25 mars 2009 - 07:59
Ca va te laisser un peu de temps pour te reposer, prendre des vacances…