java - apache+tiles2布局问题

标签 java apache jsp tiles tiles2

我有以下图 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,定义名称 viewedit 必须与 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/

相关文章:

java - 如何使用jsp插入DATE

java - 将 SQL 结果相互链接

java - 在 OpenCMS 网站上更改域名

c - 从apache模块读取POST参数

java - 如果条件不能正常工作

java - 在 Eclipse 中将多个 .java 文件合并为一个 .jar 文件(它们相互依赖)

java - 在 Web 应用程序中卡住

php - 在没有扩展的情况下运行 PHP 页面

javascript - 只刷新一个div

mysql - foreach内部sql :query jSTL