1

我有以下瓷砖配置文件

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

并相应地加载页面。我认为我的问题很清楚

我正在使用 apache 瓷砖 2.2.2

提前致谢

干杯

同龄人

4

1 回答 1

1

除非您有许多不同的页眉/页脚/菜单,否则您可以简化/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>

瓷砖-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 查看器文件将没有任何图块标签,因为将这些标签放在查看器中会使您的布局非常僵化和侵入性......这是您现在面临的问题。相反,只将实际内容放在查看器文件中。它们将自动包含<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 将在页面显示在屏幕上之前自动装饰您的页面。

于 2011-04-04T14:58:29.733 回答