欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用chain方式,在第二action中获取第一个action中actionMessage

程序员文章站 2022-05-16 12:22:57
...

为什么采用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" />