JSF + Tiles
Combiner JSF et Tiles, c'est possible !
Voici comment j'ai réussi à mixer les deux :
Une fois l'archive téléchargée et extraite, il faut récupérer les fichiers JAR de l'archive (situés à la racine et dans
Ayant créé mon projet sous Glassfish, les librairies de JSF sont directement inclues dans le serveur d'application.
Première chose, déclarer la Servlet de Tiles. Dans notre fichier
Ensuite, l'écouteur (toujours dans
On déclare une définition dans notre fichier
On crée ensuite le template correspondant à notre définition. S'agissant d'une simple page de test, j'ai fait plutôt simple :
Il ne reste plus qu'à inclure nos définitions dans nos pages JSF :
Cela n'est malheureusement pas possible en JSF.
Une petite astuce permet cependant de passer à coté de cet inconvénient. Il s'agit de créer une JSP visible (en dehors de
Voici comment j'ai réussi à mixer les deux :
1. Télécharger Tiles
La page de téléchargement est ici. J'ai utilisé la 2.0.5.Une fois l'archive téléchargée et extraite, il faut récupérer les fichiers JAR de l'archive (situés à la racine et dans
/lib, et les copier dans votre projet.Ayant créé mon projet sous Glassfish, les librairies de JSF sont directement inclues dans le serveur d'application.
2. Configurer Tiles
La configuration de Tiles se passe en deux étapes. Une première étape consiste à déclarer une Servlet qui sera chargée au démarrage. La seconde étape consistera à déclarer un écouteur. Tout ça dans notre application Web.Première chose, déclarer la Servlet de Tiles. Dans notre fichier
web.xml :
<servlet> <servlet-name>TilesServet</servlet-name> <servlet-class>org.apache.tiles.web.startup.TilesServlet</servlet-class> <init-param> <param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name> <param-value>/WEB-INF/tiles-defs.xml</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet>
Ensuite, l'écouteur (toujours dans
web.xml) :
<listener> <listener-class>org.apache.tiles.web.startup.TilesListener</listener-class> </listener>
3. Utiliser Tiles !
Dernière étape : tester l'installation !On déclare une définition dans notre fichier
/WEB-INF/tiles-defs.xml :
<definition name="test" template="/WEB-INF/pages/test.jsp"> </definition>
On crée ensuite le template correspondant à notre définition. S'agissant d'une simple page de test, j'ai fait plutôt simple :
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <h2><h:outputText value="Tiles works !" /></h2>
Il ne reste plus qu'à inclure nos définitions dans nos pages JSF :
<%@page contentType="text/html" pageEncoding="UTF-8" %> <%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <%@taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %> <f:view> <f:subview id="test"> <tiles:insertDefinition name="test" flush="false" /> </f:subview> </f:view>
4. Inconvénients et astuces
Tiles est un framework très bien intégré à Struts. Il est possible, en utilisant Struts, de lier directement le rendu d'une action vers une définition Tiles.Cela n'est malheureusement pas possible en JSF.
Une petite astuce permet cependant de passer à coté de cet inconvénient. Il s'agit de créer une JSP visible (en dehors de
/WEB-INF) qui inclue directement la définition à utiliser. Au lieu de créer un lien vers une définition, il faudra alors créer un lien vers la JSP qui inclue cette définition.