在struts2中多个action间如何传递ActionError及actionmessage?

kyo100900 2008-09-05
zhuzidian 写道
kyo100900 写道
引用
<result name="input" type="redirect-action">adminGLZF!update?adminId=${adminId}   
         </result>        
 



为什么验证失败了还要 redirect-action 一下? 直接返回 dispatcher 到 input页面不好吗?


但是如果在进入input页面之前还经过了一个action(例如为了取数据), 那就不能直接dispatcher 到 input页面啦, 而是要重新经过一个action吧, 但是要经过一个action就要redirect-action 一下, ActionError和FieldError等就不见了, 所以很矛盾...


假设input方法是为了取数据, save方法是保存.

1.如果是手动在Action验证:在调用save方法时,当验证没有通过时,再调用一次input
if(validator()==false){
     input(); //再次取数据
      actionMessage();
     actionError();
     .......
     return INPUT;
}

2.如果是使用Struts2自带的验证框架,

2.1) 最简单的话可以实现prepare接口,再次调用:input();

	public void prepare() throws Exception {
		input();
	}




2.2) 更灵活的方式是自己写一个Interceptor

public class SimpleInterceptor extends AbstractInterceptor {

    public String intercept(ActionInvocation invocation) throws Exception {
       MyAction action = (MyAction)invocation.getAction();
       action.input();
       return invocation.invoke();
    }
}




注意配置的时候,该Interceptor 一定要在<interceptor-ref name="validation"> 之前, 否则input不会被调用。




上面的两种方式,我都亲自试了,希望对你有帮助。
zhuzidian 2008-09-06
非常感谢, 解决了困扰我很久的问题了
smallsnake 2008-09-14
用chain ,action链式处理
smallsnake 2008-09-14
chain,可以保证ActionError和FieldError等信息不会丢失
下面是struts2的API解释

This result invokes an entire other action, complete with it's own interceptor stack and result.
cosmicbao 2008-10-29
用chain 解决
在要链接的action中加入<interceptor-ref name="chain" />

在跳转的链接中加入 <result name="input" type="chain"></result>
Global site tag (gtag.js) - Google Analytics