2010-08-23 11 views
3

J'ai un tuiles defs.xml qui a ces définitions ...comment inclure des attributs de définition des tuiles dans une page insérée

<definition name="masterLayout" path="/WEB-INF/tiles-layouts/globalLayout.jsp"> 
    <put name="pageTemplate" value="over-ride for each page" /> 
</definition> 

<definition name="childLayout" extends="masterLayout"> 
    <put name="pageTemplate" value="/WEB-INF/tiles-layouts/child/layout.jsp" /> 
    <put name="title" value="page title" /> 
    <put name="metaKeywords" value="" /> 
    <put name="metaDescription" value="" /> 
    <put name="body"   value="/child/pagebody.jsp"/> 
    <putList name="list"> 
     <add value="title" /> 
     <add value="metaKeywords" /> 
     <add value="metaDescription" /> 
     <add value="body" /> 
    </putList> 
</definition> 

dans globalLayout.jsp je ce travail, mais je ne veux pas toujours connaître les attributs que la définition enfant a ajoutés à la page.

<tiles:insert attribute="pageTemplate"> 
<tiles:put name="title"><tiles:getAsString name="title" /></tiles:put> 
<tiles:put name="metaKeywords"><tiles:getAsString name="metaKeywords" /></tiles:put> 
<tiles:put name="metaDescription"><tiles:getAsString name="metaDescription" /></tiles:put> 
<tiles:put name="body"><tiles:getAsString name="body" /></tiles:put> 

Depuis la définition de l'enfant ne comprend pas toujours les mêmes attributs. Est-il possible d'utiliser la putList dans la définition enfant pour placer les attributs dans la portée de la page enfant à l'intérieur de globalLayout.jsp? J'ai essayé ce qui suit, mais il échoue

<%@ page import="java.util.Iterator" %> 
<tiles:importAttribute /> 
<bean:define id="list" name="list" type="java.util.List" scope="page" /> 
<tiles:insert attribute="pageTemplate" ignore="true" flush="true"> 
    <% 
    for (Iterator it = list.iterator(); it.hasNext();) { 
     String item = (String) it.next(); 
    %> 
     <tiles:put name="<%=item%>"><tiles:getAsString name="<%=item%>" ignore="true" /></tiles:put> 
    <% } %> 
</tiles:insert> 

Répondre

5

au lieu d'essayer de pousser les attributs vers le bas à une disposition des enfants, j'ai tiré la mise en page d'enfant dans le cadre de la mise en page de parent.

<tiles:importAttribute name="pageTemplate" /> 
<bean:define id="pageTemplate" name="pageTemplate" /> 
<jsp:include flush="true" page="<%=pageTemplate%>"></jsp:include> 
12

Avec 2 tuiles vous pouvez maintenant définir cascade="true" sur put-attributes en tuiles. Cela les rendra visibles aux modèles enfants imbriqués.

Voir here

+0

intéressant- Je ne l'avais pas vu auparavant. Malheureusement, ma question initiale portait sur un ancien code écrit avec Tiles 1. – David