在struts.xml中重用redirect-action?

时间:2012-07-31 07:34:07

标签: struts2

我有多个操作,在完成后重定向回到一般页面(showStuff)。我正在寻找一种不重复每个重定向动作的参数列表的方法。

我拥有的是:

<action name="doThis" class="com.domain.package.MyAction" method="doThis">
    <result type="redirectAction">
        <param name="actionName">showStuff</param>
        <param name="parse">true</param>
        <param name="selectedYear">${selectedYear}</param>
        <param name="selectedMonth">${selectedMonth}</param>
        <param name="selectedDay">${selectedDay}</param>
    </result>
</action>
<action name="doThat" class="com.domain.package.MyAction" method="doThat">
    <result type="redirectAction">
        <param name="actionName">showStuff</param>
        <param name="parse">true</param>
        <param name="selectedYear">${selectedYear}</param>
        <param name="selectedMonth">${selectedMonth}</param>
        <param name="selectedDay">${selectedDay}</param>
    </result>
</action>

我想将参数列表保留在showStuff操作定义中,然后使用就像这样:

<action name="doThis" class="com.domain.package.MyAction" method="doThis">
    <result type="redirectAction">
        <param name="actionName">showStuff</param>
    </result>
</action>
<action name="doThat" class="com.domain.package.MyAction" method="doThat">
    <result type="redirectAction">
        <param name="actionName">showStuff</param>
    </result>
</action>

有可能吗?

3 个答案:

答案 0 :(得分:1)

有几个选择。

老实说,我会跳过大部分的解决方法,并将它们放入会议中。

一旦他们进入会话,就创建一个拦截器和接口(Dateable或其他东西)。在拦截器中检查会话中的变量(见下文),如果操作是Dateable,请在操作上设置它们,然后就完成了。

另一种选择是将这些变量封装为日期,并使用内置转换器或使用您自己的转换器。那你只需要一个参数。此选项也适用于拦截器的想法。

答案 1 :(得分:0)

事实证明,这是非常可能的。你就是这样做的:

添加全局结果:

<global-results>
    <result name="show-stats" type="redirectAction">    
        <param name="actionName">showStats</param>
        <param name="parse">true</param>
        <param name="selectedYear">${selectedYear}</param>
        <param name="selectedMonth">${selectedMonth}</param>
        <param name="selectedDay">${selectedDay}</param>
  </result>

然后是行动:

<action name="doThis" class="com.domain.package.MyAction" method="doThis"/>
<action name="doThat" class="com.domain.package.MyAction" method="doThat"/>

最后在java代码中,只需:

return "show-stats";

你已经完成了。

作为旁注,为什么我要花费这么多时间来坚持最基本的DRY原则?是不是所有这些框架都应该......你知道......简化东西?只是想知道...

答案 2 :(得分:0)

我面临同样的问题,无数的参数越来越长,在几个地方重复。我最终做的是我创建了一个外部文件并在struts.xml中将其声明为实体然后包含它而不是重复所有参数

这是doctype标签

<!ENTITY referenceName SYSTEM "fileName">

然后你就这样包括它

&referenceName;