首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >apache + tiles2布局问题

apache + tiles2布局问题
EN

Stack Overflow用户
提问于 2011-04-04 10:22:53
回答 1查看 889关注 0票数 1

我有以下的tiles配置文件

代码语言:javascript
复制
<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 .

代码语言:javascript
复制
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<tiles:insertDefinition name="home" />

这里的问题是,如果我想用相同的布局加载"edit.jsp“页面,我需要在tiles.xml中重复这个部分

代码语言:javascript
复制
<definition name="editbase" extends="base">
            <put-attribute name="contentBody" value="/home/edit.jsp" />
</definition>

并创建一个名为"editbase.jsp“的文件并调用它。(重复上述代码)

我只是想知道这是正确的方式还是我能做的事

代码语言:javascript
复制
<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

提前感谢

干杯

萨梅拉

EN

回答 1

Stack Overflow用户

发布于 2011-04-04 14:58:29

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

/includes/layout.jsp

代码语言:javascript
复制
<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的属性。

代码语言:javascript
复制
<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标记,因为将这些标记放在查看器中会使您的布局变得非常僵硬和侵入性……这就是你现在面临的问题。相反,只将实际内容放在查看器文件中。它们将由<tiles:insert>从布局文件中自动包含。

struts-config.xml

如果使用Struts,定义名称view编辑必须匹配struts配置中的路径,例如:-

代码语言:javascript
复制
    <action path="/bla" type="..." name="FrmReport" scope="request">
        <!-- path "view" must match tiles definition name -->
        <forward name="success" path="view"></forward>
    </action>

这样,在页面显示在屏幕上之前,瓷砖将自动装饰您的页面。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5537168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档