在Struts中动态修改切片

时间:2013-01-31 10:16:39

标签: java jsp struts tiles struts-1

我正在尝试根据当前活动的module来修改我的网页的外观。基本上,我有一组常见的jsp页面,需要根据模块更改切片。

我可以使用每个模块独立实现基本磁贴。这要求我在jsp中指定tile的定义。所以我的问题是,如何更改定义,因此,根据模块动态更改切片。

我正在使用带有Struts 1.1的Tiles(不是我的选择,但要求是这样的),并且是这个框架的新手。

编辑:我尝试过浏览文档,浏览其他论坛和博客,但没有遇到类似的内容。有没有其他方法可以实现这一点,可能没有切换磁贴定义?

1 个答案:

答案 0 :(得分:2)

我从您的问题中了解到,您将在tiles-defs.xml文件中为1个JSP定义2个。喜欢

<definition name="outputPage" extends="mainLayout">
    <put name="title" value="HELLO" />
    <put name="body"   value="/pages/Welcome.jsp" />
</definition>
<definition name="outputPage2" extends="mainLayout">
    <put name="title" value="HELLO2" />
    <put name="body"   value="/pages/tile2.jsp" />
</definition>

我建议实现您的要求的一种方法是在属性中设置模块类型(比如request.setAttribute("module", "module2");)。

假设您将在struts-config.xml中为同一个JSP页面提供2个转发器。

    <action
            path="/Welcome"
            forward="/pages/tileTest.jsp"/>  
<action
            path="/customerAction"
            type="xyz.actions.CustomerAction"
            name="customerForm"
            scope="request">

            <forward name="tile" path="/Welcome.do"></forward>
            <forward name="customer" path="/pages/customer.jsp"></forward>
       </action>

然后在您的JSP页面(tileTest.jsp)中,将定义类似于

的切片
    <%@page language="java" pageEncoding="shift-jis"%>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-tiles" prefix="tiles" %>
<logic:notEmpty name="module">
<logic:equal name="module" value="module1">
<tiles:insert definition="outputPage" flush="true" />
</logic:equal>
</logic:notEmpty>

<logic:notEmpty name="module">
<logic:equal name="module" value="module2">
<tiles:insert definition="outputPage2" flush="true" />
</logic:equal>
</logic:notEmpty>

<logic:empty name="module">
<tiles:insert definition="outputPage" flush="true" />
</logic:empty>