我的需求是在struts.xml中有一个全局结果,它具有要重定向到的动作的动态值。 像,
<global-results>
<result name="customResult" type="redirectAction">
<param name="actionName">${customValue}</param>
<param name="namespace">/</param>
</result>
</global-results>
这个customResult是从我的一个拦截器返回的。 customValue是getter和setter的同一拦截器的成员。
我知道特定于操作的结果可以包含动态值,前提是动态参数应该在特定操作的execute方法中获取其值。并且,该动态参数应该是该动作类的成员。
因为在全局结果中需要它,所以我将动态参数作为interceptop的成员,我返回该特定的全局结果。但是,这个$ {customValue}在重定向时没有获得值。它被简单地重定向到localhost:9080 / myapp / .action。
请建议
答案 0 :(得分:2)
动作属性将被放入值堆栈中,这就是为什么在配置中有表达式(如${customValue}
)时,将使用适当的getter检索值。为了在拦截器内实现相同的行为,您可以将所需的值直接放入值堆栈中。可以从invocationContext
。
invocation.getInvocationContext().getValueStack()
.set("customValue", "some_action");