我正在成功地使用Struts tiles 1,但是我在尝试嵌套tiles时遇到了一个问题。
我目前的布局是这样的:

我希望有另一个这样的模板,用于相当多的用户页面:

因此,我希望为用户布局扩展第一个布局。在我使用的tiles定义中:
<definition name=".basic.layout" path="/WEB-INF/jsps/basicLayout.jsp">
....
<definition name=".user.layout" extends=".basic.layout">
<put name="content" value="/WEB-INF/jsps/user/layout.jsp"/>
....
<definition name=".user.page" extends=".user.layout">
<put name="userContent" value="/WEB-INF/jsps/user/page.jsp"/>
....在user/layout.jsp中,我通常会使用<tiles:get name="userContent"/>来显示磁贴。
问题是The requested resource (/WEB-INF/jsps/user/userContent) is not available
发布于 2009-11-21 20:53:21
我在here上找到了一些信息
这个解决方案对我很有效。
在这种情况下,通常您必须在现有定义的基础上创建新的定义,在正确的模板中填充属性,并将新定义作为属性分配给主模板。
换句话说:
<definition name="product.nav" template="/productNavLayout.jsp">
<put-attribute name="productPathNav" value="/productPathNav.jsp" />
<put-attribute name="productNav" value="/productNav.jsp" />
</definition>
<definition name="product.nav.extended" extends="product.nav">
<put-attribute name="productContent" value="product.grid" />
</definition>
<definition name="page.products" extends="layout">
<put-attribute name="content" value="product.nav.extended" />
</definition>发布于 2014-01-22 10:21:02
有一个cleaner solution。
另一种方法是在tiles-def.xml文件中只使用一个定义(加上defaultLayout定义)。
tiles-def.xml
<definition name="defaultLayout" template="/WEB-INF/layout.jsp">
<put name="header" value="/WEB-INF/header.jsp" />
<!-- definitions based on this layout must define "body" -->
<put name="footer" value="/WEB-INF/footer.jsp" />
</definition>
<definition name="editPage" extends="defaultLayout">
<put name="body" value="/WEB-INF/editBody.jsp" />
<put name="a" value="/WEB-INF/a.jsp" />
<put name="b" value="/WEB-INF/b.jsp" />
</definition>layout.jsp
<tiles:insert attribute="header">
<tiles:insert attribute="body" >
<!-- propogate "a" and "b" down to the next level -->
<tiles:put name="a" beanName="a"/>
<tiles:put name="b" beanName="b"/>
</tiles:insert>
<tiles:insert attribute="footer">editBody.jsp
<table>
<tr>
<td><tiles:insert attribute="a"/></td>
<td><tiles:insert attribute="b"/></td>
</tr>
</table>这种方法的缺点是layout.jsp必须知道(任何) body.jsp页面的可能参数列表。
发布于 2009-11-21 05:23:34
我使用Struts Tiles已经有很长一段时间了,但是您不应该使用而不是<tiles:get>吗
也就是说,类似于:
<tiles:insert attribute="userContent" flush="false"/>https://stackoverflow.com/questions/1772797
复制相似问题