【问题标题】:how to include tiles definition attributes in an inserted page如何在插入的页面中包含切片定义属性
【发布时间】:2010-08-23 16:57:53
【问题描述】:

我有一个包含这些定义的 tiles-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>

【问题讨论】:

    标签: jsp struts tiles


    【解决方案1】:

    使用 Tiles 2,您现在可以在图块中将 cascade="true" 设置为 put-attributes。这将使它们对嵌套的子模板可见。

    here

    【讨论】:

    • 有趣——我以前没见过。不幸的是,我最初的问题是关于用 Tiles 1 编写的一些旧代码。
    【解决方案2】:

    我没有尝试将属性下推到子布局,而是将子布局拉到父布局的范围内。

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

    【讨论】:

      猜你喜欢
      • 2015-05-21
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      相关资源
      最近更新 更多