TILES
<  Home  |  Présentation  |  Installation  |  TagLib  |  Exemples |  Webographie et liensContacts  >

PLAN

Deuxième exemple : concepts avancés

Dans un premier temps nous allons modifier légèrement le fichier de configuration précédemment établi. La modification a été surlignée en gras afin de la rendre évidente.

?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.


SUITE : Conclusion