为什么采用chain 方式时,没有复制Errors, Field errors and Message?
struts.xml中配置如下:
- <struts>
- <constant name="struts.devMode" value="true" />
- <package name="default" namespace="/" extends="struts-default">
- <action name="getvalue" class="example.GetValueAction">
- <result type="chain">
- <param name="actionName">getvalue2</param>
- <param name="namespace">/</param>
- </result>
- </action>
- </package>
- <package name="222" namespace="/" extends="struts-default">
- <action name="getvalue2" class="example.GetValue2Action">
- <result>/result.jsp</result>
- </action>
- </package>
- </struts>
第一个action(getvalue) 通过chain的方式把请求传递到第二个action(getvalue2),可是在第二个action无法获取第一个action中设置的actionMessage,当然在result.jsp中使用 <s:actionmessage/>也无法获取正确的值。
第一个action部分代码如下:
- public class GetValueAction extends ActionSupport {
- private static final long serialVersionUID = 4865100826143278474L;
- @Override
- public String execute() throws Exception {
- String actionMessage="aaa";//你自己需要设置的message
- addActionMessage(actionMessage);
- return super.execute();
- }
- }
原因分析:
采用chain方式时,Errors, Field errors and Message 默认不会复制到第二个action,必须手动指定:
struts.xwork.chaining.copyErrors - 设置为true ,可以复制 Action Errors 到第二个action;
struts.xwork.chaining.copyFieldErrors - 设置为true ,可以复制 Field Errors 到第二个action;
struts.xwork.chaining.copyMessages - 设置为true ,可以复制 Action Messages到第二个action;
解决方法:
在struts.xml中 添加:
<constant name="struts.xwork.chaining.copyErrors" value="true" />
<constant name="struts.xwork.chaining.copyFieldErrors" value="true" />
<constant name="struts.xwork.chaining.copyMessages" value="true" />