我有以下图 block 配置文件
<tiles-definitions>
<definition name="base" template="/includes/layout.jsp">
<put-attribute name="header" value="/includes/header.jsp" />
<put-attribute name="menu" value="/includes/menu.jsp" />
<put-attribute name="footer" value="/includes/footer.jsp" />
</definition>
<definition name="home" extends="base">
<put-attribute name="contentBody" value="/home/view.jsp" />
</definition>
</tiles-definitions>
为了显示“view.jsp”页面,我有另一个名为“home.jsp”的页面,它有以下代码(仅)
//home.jsp
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<tiles:insertDefinition name="home" />
这里的问题是,如果我想加载具有相同布局的“edit.jsp”页面,我需要在tiles.xml中重复这部分
<definition name="editbase" extends="base">
<put-attribute name="contentBody" value="/home/edit.jsp" />
</definition>
并创建一个名为“editbase.jsp”的文件并调用它。 (重复上面的代码)
我只是想知道这是正确的方法还是我可以做类似的事情
<tiles-definitions>
<definition name="base" template="/includes/layout.jsp">
<put-attribute name="header" value="/includes/header.jsp" />
<put-attribute name="menu" value="/includes/menu.jsp" />
<put-attribute name="footer" value="/includes/footer.jsp" />
</definition>
<definition name="home" extends="base">
<put-attribute name="contentBody" value="/home/view.jsp" />
<put-attribute name="contentBody" value="/home/edit.jsp" />
</definition>
</tiles-definitions>
并相应地加载页面..我认为我的问题很清楚
我使用的是 apachetiles 2.2.2
提前致谢
干杯
同一个
最佳答案
除非您有许多不同的页眉/页脚/菜单,否则您可以简化 /includes/layout.jsp
将页眉、页脚和菜单代码直接放置在其中。然后,使用<tiles:insert>
插入实际页面内容:-
/includes/layout.jsp
<html>
<head>
...
</head>
<body>
<!-- put your header code here -->
...
<!-- put your menu code here -->
...
<tiles:insert attribute="contentBody" />
<!-- put your footer code here -->
...
</body>
</html>
tiles-defs.xml
创建名为contentBody的属性。
<tiles-definitions>
<definition name="base" template="/includes/layout.jsp">
<!-- Create a contentBody with no value -->
<put name="contentBody" value="" />
</definition>
<definition name="view" extends="base">
<!-- Override base's contentBody -->
<put name="contentBody" value="/home/view.jsp" />
</definition>
<definition name="edit" extends="base">
<!-- Override base's contentBody -->
<put name="contentBody" value="/home/edit.jsp" />
</definition>
</tiles-definitions>
您的 JSP 查看器文件将不会有任何tile 标签,因为将这些标签放入查看器中会使您的布局非常僵化且具有侵入性...这就是您现在面临的问题。相反,仅将实际内容放入查看器文件中。它们将自动包含在 <tiles:insert>
中来自布局文件。
struts-config.xml
如果您使用 Struts,定义名称 view 和 edit 必须与 struts 配置中的路径匹配,例如:-
<action path="/bla" type="..." name="FrmReport" scope="request">
<!-- path "view" must match tiles definition name -->
<forward name="success" path="view"></forward>
</action>
这样,Tiles 将在页面显示在屏幕上之前自动装饰您的页面。
关于java - apache+tiles2布局问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5537168/