http://blogs.steeplesoft.com/jsf-component-writing-check-list/). Plusieurs initiatives ont vu le jour pour simplifier ce développement, comme le Component Development Kit de RichFaces. Le framework Facelets permettait également de simplifier un peu ce développement. JSF 2 a intégré Facelets et permet de créer des composants de manière déclarative dans un seul fichier XHTML, ne nécessitant plus ni l'écriture d'une classe Java (sauf si besoin est), ni de XML de description. De plus, on peut désormais créer des composants composites, qui peuvent être réutilisés dans d'autres composants.
Par exemple, on va définir un composant affichant le nom et le prénom d'une personne :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:composite="http://java.sun.com/jsf/composite"> <!-- interface --> <**composite:interface**> <**composite:attribute** name="user"/> </composite:interface> <!-- implémentation --> <**composite:implementation**> <h:form> <h:outputText value="Prénom : #{**cc.attrs.user.forname**} Nom :
#{**cc.attrs.user.name**}``"/> </h:form> </composite:implementation> </html>
Points-clés :
Pour l'utiliser dans une page, si le fichier précédent se nomme par exemple « usercomp.xhtml » et se trouve dans le répertoire « components/util », on l'utilisera comme suit : <html xmlns="http://www.w3.org/1999/xhtml" xmlns:util="http://java.sun.com/jsf/composite/components/util"> <util:usercomp user="#{sessionBean.user}"/> </html>
Ce composant est bien évidemment simpliste, et dès que l'on a du code plus complexe, on devra utliser une classe Java, etc.
Standardiser et simplifier le développement de composants est un point crucial pour l'avenir de JSF. Ces nouveautés vont donc dans la bonne direction. Il faudra encore que les outils de développements suivent pour que cela soit le plus efficace possible : intégration aux IDE, plug-ins et archetypes Maven...
On peut désormais placer les ressources (images, CSS, JavaScript) dans un répertoire nommé « resources » en dehors du répertoire WEB-INF, ou même les inclure dans un JAR à déposer dans ce même répertoire. Cela permet un meilleur versioning des ressources. On accédera par exemple à une image appelée "monimage.jpg" et à la racine du répertoire resources de la façon suivante :
#{resource['images:monimage.jpg']}
En intégrant Facelets à la la spécification , JSF 2 intègre désormais nativement des fonctions de templating de vue dans JSF. Cela évite encore d'avoir à inclure un framework tiers.
JSF2 n'apporte pas de nouveauté révolutionnaire, et pourrait ressembler plus à une amélioration de JSF 1.2 qu'à une nouvelle version majeure. Il améliore tout de même la productivité et la ré-utilisation en simplifiant les développements, et ce de façon non négligeable. Désormais, les limitations de JSF viendront sans doute de ses principes fondamentaux :
L'amélioration de la productivité du développement, grâce à l'utilisation de composants et aux outils, notamment le support par les IDE, sera la clef pour la réussite de JSF, si les fondamentaux du framework ne changent pas.
P.S: on remarquera l'absence des tests dans cet article. L'absence de nouveautés dans JSF 2 concernant ce point ne signifie pas pour autant qu'il est impossible de tester. Cela pourra faire l'objet d'un autre article.
L'API et l'implémentation de référence de JSF 2 sont déjà disponibles ici : http://download.java.net/maven/2/com/sun/faces/ et presque finalisées. Bien que JSF 2 ne fera partie que de la version 6 de JEE, il tourne sur la plupart des serveurs JEE 5 du marché (Tomcat, JBoss, Glassfish...). Pensez- simplement à mettre à jour les librairies JSF fournies par le serveur sur JBoss et Glassfish...
Mon collègue Damien Gouyette et moi-même présenterons une session du Paris Java User Group consacrée à JSF 2 le 15 octobre prochain.
Pensez à réserver vos places!