0

我有多个操作完成后重定向回一般页面(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>

可能吗?

4

3 回答 3

1

有几个选项。

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

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

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

于 2012-07-31T14:22:37.530 回答
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 原则?不是所有这些框架都应该..你知道..简化东西吗?就是想...

于 2012-08-03T11:59:36.727 回答
0

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

这在 doctype 标签中

<!ENTITY referenceName SYSTEM "fileName">

然后你像这样包含它

&referenceName;
于 2014-08-04T16:04:28.220 回答