lundi 11 mai 2009

Struts 2 + Tiles 2 : passage d'attributs à une sous JSP

Bonjour,
dans mon projet j'utilise Struts 2 et j'ai integré Tiles 2 pour gérer l'affichage de toutes mes pages (pour rappel : Tiles 2 permet de définir des layouts pour toutes les pages de l'application pour assurer une charte graphique par exemple)

La définition du gabarit Tiles 2 est par exemple le suivant (dans tiles.xml) :

<definition name="baseLayout" template="/layouts/base.jsp">
<put-attribute name="title" value="Sans titre">
<put-attribute name="footer" value="/tiles/footer.jsp">
<put-attribute name="header" value="/tiles/header.jsp">
<put-attribute name="body" value="">
</definition>


Lorsqu'on rajoute une action Struts 2 (je ferai peut être un message sur l'intégration de Tiles 2 dans Struts 2), il suffit de rajouter dans tiles.xml :

<definition name="HelloWorld" extends="baseLayout">
<put-attribute name="title" value="Hello World !!!">
<put-attribute name="body" value="/tiles/helloWorld.jsp">
</definition>


Dans mon header.jsp, je voulais afficher le titre passé dans l'attribut title dans tiles.xml. J'ai galéré pour faire cela. Voici la solution toute simple :

Dans mon template base.jsp, il faut faire pour afficher header.jsp :

...
<tiles:importattribute name="title">
<tiles:insertattribute name="header">
<tiles:putattribute name="title" value="${title}">
</tiles:insertAttribute>
...


Avec ça, l'attribut title est bien passé à header.jsp, ainsi cette page peut afficher le titre en attribut :

<h1><tiles:getasstring name="title">


A noter : Dans header.jsp, on est pas obliger d'utiliser le même nom d'attribut que dans base.jsp. C'est ce qu'on met dans putAttribute name="" qui définit le nom de l'attribut. Ici j'ai mis aussi title, donc le nom de l'attribut dans header.jsp est identique à celui dans base.jsp

Voila c'est tout ;)

Aucun commentaire:

Enregistrer un commentaire