как включить атрибуты определения плиток на вставленной странице - PullRequest
3 голосов
/ 23 августа 2010

У меня есть файл tile-defs.xml с этими определениями ...

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

в globalLayout.jsp У меня это работает, но я не всегда буду знать, какие атрибуты дочернее определение добавило на страницу.

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

Поскольку определение потомка не всегда будет включать в себя одни и те же атрибуты. Есть ли способ использовать putList в дочернем определении, чтобы поместить атрибуты в область дочерней страницы внутри globalLayout.jsp? Я пробовал следующее, но это не удается

<%@ 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>

Ответы [ 2 ]

13 голосов
/ 22 февраля 2012

С Tiles 2 теперь вы можете установить cascade="true" на put-attributes в плитках.Это сделает их видимыми для вложенных дочерних шаблонов.

См. здесь

5 голосов
/ 23 августа 2010

вместо того, чтобы пытаться перенести атрибуты в дочерний макет, я поднял дочерний макет в область родительского макета.

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