在Struts2中,命名变量在重定向到另一个动作时未被清除

时间:2013-01-29 19:49:37

标签: redirect struts2 named-parameters valuestack

当从另一个动作重定向到某个动作时,我遇到了一个奇怪的问题。简而言之,在第一个动作中捕获的命名变量(我从中重定向)仍然以某种方式保留在值栈中,并且它在第二个动作中覆盖相同的命名变量。我将通过一些代码解释。

<action name="r/{seoURL}" class="ReportsAction"
    method="displayReport">
    ...
    <result name="REDIRECT_TO_NEXT_ACTION" type="redirectAction">
        <param name="actionName">s/${seoURLForRedirect}</param>
        <param name="namespace">/reports</param>
    </result>
    ...
</action>

我在返回前在${seoURLForRedirect}设置变量ReportsAction。 我有第二个动作的以下映射。

<action name="s/{seoURL}" class="ReportSeriesAction"
    method="displayReportSeries">
    ...
</action>

正如您所看到的,我在第二个动作seoURL中有相同的命名变量。此值设置为第一个操作中找到的值。我无法理解为什么值堆栈仍然在第一个操作中设置了seoURL值。特别是因为我在我的重定向结果参数中写了它。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

根据您的class操作属性,我假设您正在使用Spring插件。

必须将操作声明为scope="prototype" /非单例,才能按请求进行实例化。

如果他们不是,那么您正在使用单身人士,并且会在请求中维护属性。

我从未尝试将redirectAction的{​​{1}}设置为指向另一个通配符操作的通配符,因此我不确定问题的第二部分。