【问题标题】:apache + tiles2 layout problemapache + tiles2 布局问题
【发布时间】:2011-04-04 10:22:53
【问题描述】:

我有以下瓦片配置文件

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

提前致谢

干杯

同人

【问题讨论】:

    标签: java apache jsp tiles tiles2


    【解决方案1】:

    除非您有许多不同的页眉/页脚/菜单,否则您可以简化/includes/layout.jsp,将页眉、页脚和菜单代码直接放在其中。然后,使用&lt;tiles:insert&gt; 插入实际的页面内容:-

    /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 查看器文件将没有任何图块标签,因为将这些标签放在查看器中会使您的布局非常僵化和侵入……这就是您现在面临的问题。相反,只将实际内容放在查看器文件中。它们将被&lt;tiles:insert&gt; 自动包含在布局文件中。

    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 会在页面显示在屏幕上之前自动装饰您的页面。

    【讨论】:

    • 嗨@limc,谢谢你的详细回答,我的意思是,我应该把定义名称放在哪里 tiles.apache.org/tags-tiles" prefix="tiles" %> 在 vi​​ew.jsp 文件本身中。或者在一个单独的文件中...非常感谢您的回答欢呼.. EDIT:: 我使用的是普通的jsp(不是struts):D
    猜你喜欢
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 2016-07-31
    • 2013-02-17
    相关资源
    最近更新 更多