2

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

<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在第一个操作中设置的值。特别是因为我在重定向结果参数中写完了它。

任何帮助表示赞赏。

4

1 回答 1

2

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

必须将操作声明为scope="prototype"/non-singleton 才能按请求实例化。

如果不是,您使用的是单例,并且属性将跨请求维护。

我从未尝试将redirectAction's设置actionName为指向另一个通配符操作的通配符,所以我不确定问题的第二部分。

于 2013-01-29T19:57:34.280 回答