我有一个需要中止操作并重定向到新页面的拦截器。目前,它返回一个像“go_to_foo”这样的字符串。这工作正常,但我还想为动作发送一个额外的参数。我试图在struts.xml中配置该结果,如:
<global-results>
...
<result name="go_to_foo">
<param name="location">foo.jsp</param>
<param name="testing">mark</param>
</result>
</global-results>
我遇到以下异常:在类型'org.apache.struts2.dispatcher.ServletDispatcherResult'上设置属性'testing'时捕获OgnlException。我想知道这是否是因为Request对象不知道任何'testing'参数。
或者,我也想知道Interceptor是否有可能在返回字符串“go_to_foo”之前添加/修改请求的参数,以便它们仍然可以在foo.jsp中使用。如果这样的事情是可能的,也许我不需要上面的内容。
我希望这很清楚。
谢谢, 标记
答案 0 :(得分:3)
您忘记了type=redirect
属性
<result name="go_to_foo" type="redirect">
<param name="location">foo.jsp</param>
<param name="testing">mark</param>
</result>
访问值使用
<s:property value="#parameters.testing" />
或
${parameters.testing[0]}
答案 1 :(得分:2)
<param/>
标记用于设置结果的参数,而不是用于将查询字符串参数添加到重定向。
<param name="testing">mark</param>
试图在ServletRedirectResult类上调用setTesting("mark")
。没有这样的方法。
尝试:<param name="location">foo.jsp?testing=mark</param>
另外,你真的需要重定向吗?为什么不直接将所需参数添加到操作上下文中并继续?