?xml
version="1.0" encoding="ISO-8859-1"?>
<web-app>
<!-- Action Servlet Configuration -->
<servlet>
<servlet-name>action</servlet-name>
<!-- Spécification de la classe servlet a
utiliser:
- Struts1.0.x:
ActionComponentServlet
- Struts1.1:
ActionServlet
- no Struts:
TilesServlet
-->
<!--
<servlet-class>org.apache.struts.tiles.ActionComponentServlet</servlet-class>
-->
<!--
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
-->
<servlet-class>org.apache.struts.tiles.TilesServlet</servlet-class>
<init-param>
<param-name>definitions-config</param-name>
<param-value>/WEB-INF/tiles-defs.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- The Welcome File List -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- Struts Tag Library Descriptor -->
<taglib>
<taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
</taglib>
</web-app>
|
Cette modification va permettre d'utiliser un fichier de
définition. Une définition est la déclaration d'un
composant tiles qui pourra être utilisé dans tous les
contextes (pages, template, ...). C'est une déclaration
d'une balise d'insertion de manière générale que
l'on va pouvoir insérer dans n'importe quel contexte. Voici le
fichier de définitions :
<!DOCTYPE
tiles-definitions PUBLIC
"-//Apache Software
Foundation//DTD Tiles Configuration//EN"
"http://jakarta.apache.org/struts/dtds/tiles-config.dtd">
<!-- Definitions for Tiles documentation -->
<tiles-definitions>
<!--
======================================================= -->
<!-- Master definition
-->
<!--
======================================================= -->
<!-- Definition de la page mere.
-->
<definition name="site.mainLayout"
path="/tiles-layout/layout.jsp">
<put name="title" value="A DEFINIR"
/>
<put name="header"
value="/tiles-component/header.jsp" />
<put name="menu"
value="site.menu.bar" />
<put name="footer"
value="/tiles-component/footer.jsp" />
<put name="body" value="A
DEFINIR" />
</definition>
<!--
======================================================= -->
<!-- Index page definition
-->
<!--
======================================================= -->
<definition name="site.index.page"
extends="site.mainLayout" >
<put name="title" value="Tiles
Exemple 2" />
<put name="body"
value="/tiles-component/body.jsp" />
</definition>
<!--
======================================================= -->
<!-- Menus definitions
-->
<!--
======================================================= -->
<definition name="site.menu.bar" path="/tiles-component/Menu.jsp"
>
<put name="title" value="Documentation" />
<putList name="list" >
<add value="liens 1" />
<add value="liens 2" />
</putList>
</definition>
</tiles-definitions>
|
On pourra remarquer que ce fichier suit la dtd spéciale de
Tiles. Nous pouvons aussi remarquer certain points particuliers :
- le mot "extends" : Il permet d'effectuer de
l'héritage entre les définitions. Une définition
fille va
heriter de tous les paramètres de la définition
mère et pouvoir redéfinir certain de ces
paramètres ou en ajouter des nouveaux. La notion
d'héritage est très pratique dans le cas de
spécialisation de certaine pages Internet (menu particulier,
...).
- la définition d'une liste d'argument
dans la définition de "site.menu.bar" qui sera détailler
un peu plus tard.
Maintenant pour inclure la définition dans une page web il
suffit simplement de suivre la procédure suivante :
<%@ page
language="java" %>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<tiles:insert definition="site.index.page" flush="true" />
|
Nous avons vu précédemment dans l'écriture du
fichier de définition, comment utiliser la balise "putList".
Cette balise permet d'écrire une liste en mémoire dans le
sens JAVA du terme (ArrayList, LinkedList, ...). Son utilisation dans
le cadre d'un menu n'est certe pas intéressant car pour un menu
on associe toujours un nom a un lien. Ici nous n'avons qu'une liste de
nom.
Pour parcourir cette liste dans la page jsp menu.jsp, il faudra dans un
premier temps déclarer l'attribut 'list' comme une
java.util.List. Ensuite à l'aide d'un itérateur nous
pourrons
récupérer le contenu de la liste. Voici un exemple de
déclaration, récupération et affichage de la liste
:
<%@ taglib
uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<%@ page import="java.util.Iterator" %>
<table cellspacing="2" cellpadding="2" border="0" width="20%">
<tr>
<td
bgcolor="#336699"><tiles:getAsString name="title"/></td>
</tr>
<tiles:useAttribute id="list" name="list" classname="java.util.List"
/>
<%
Iterator i=list.iterator();
while( i.hasNext() ) {
String name= (String)i.next();
%>
<tr>
<td align="right"><a
href="<%=request.getContextPath()%>"><%=name%></a></td>
</tr>
<%
} // fin du while
%>
</table>
|
Nous avons vu comment reconstruire la même page web mais avec des
procédés qui sont uniques à Tiles. Mais quel est
le résultat de tous ces codes ? C'est ce qui sera abordé
dans la prochaine partie.