Struts2 Tiles插件具有多个动作类

时间:2013-01-15 16:27:05

标签: struts2 tiles2 struts2-tiles-plugin

在线发现了一些非常好的示例,它们将Struts 2与Tiles 2集成在一起。我注意到所有这些示例都是使用单个动作类中的通配符方法映射动作。有这样做的理由吗?当我将操作单独映射到多个类时,我的应用程序不起作用。在下面的代码中,我添加了lookUpAll操作。其余代码来自我试图遵循的示例。

struts.xml中:

<struts>
<package name="default" extends="struts-default">
    <result-types>
        <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
    </result-types>

    <action name="*Link" method="{1}" class="action.LinkAction">
        <result name="welcome" type="tiles">welcome</result>
        <result name="friends" type="tiles">view</result>
        <result name="office" type="tiles">office</result>
    </action>

    <action name="lookUpAll" class="action.LookupAll">
        <result name="success" type="tiles">view</result>
        <result name="error" type="tiles">lookFail</result>
    </action>
</package>
</struts>

Tiles.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">

<tiles-definitions>

  <definition name="baseLayout" template="/baseLayout.jsp">
      <put-attribute name="title"  value="Template"/>
      <put-attribute name="header" value="/header.jsp"/>
      <put-attribute name="menu"   value="/menu.jsp"/>
      <put-attribute name="body"   value="/body.jsp"/>
      <put-attribute name="footer"   value="/footer.jsp"/>
  </definition>

  <definition name="welcome" extends="baseLayout">
      <put-attribute name="title"  value="Welcome"/>
      <put-attribute name="body"   value="/welcome.jsp"/>      
  </definition>

  <definition name="view" extends="baseLayout">
      <put-attribute name="title"  value="View"/>
      <put-attribute name="body"   value="/DispSchedule.jsp"/>      
  </definition>

  <definition name="lookFail" extends="baseLayout">
      <put-attribute name="title"  value="LookFail"/>
      <put-attribute name="body"   value="/lookUpFail.jsp"/>      
  </definition>

  <definition name="friends" extends="baseLayout">
      <put-attribute name="title"  value="Friends"/>
      <put-attribute name="body"   value="/friends.jsp"/>      
  </definition>

  <definition name="office" extends="baseLayout">
      <put-attribute name="title"  value="Office"/>
      <put-attribute name="body"   value="/office.jsp"/>      
  </definition>

</tiles-definitions>

1 个答案:

答案 0 :(得分:1)

不需要使用通配符,但是当应用程序使用单个(或多个)操作,多个方法来处理紧密耦合的功能时,这很方便。

特别是对于小型应用和演示,它是一种最小化XML配置的方法。

现在,删除大多数XML配置并使用注释单独配置操作/方法可能更为典型。


编辑以反映全新的问题。

我不能复制这个问题。在menu.jsp和header.jsp中使用一行最小的S2应用程序和一个精简的baseLayout.jsp会产生以下结果:

enter image description here