Struts2中Action的@BeforeResult方法被执行两次或多次解决办法

 

有时候Struts2中Action的@BeforeResult方法被执行两次或多次问题
这个问题通常会在两种情况下发生
第一种是在标注了@BeforeResult的方法中有异常发生,这个时候struts2会调用这个方法多次,这个问题同事有很多人碰到过,解决办法是在标注了@BeforeResult的方法中捕获所有异常,然后添加到ActionError中。
第二种是出现的情况是在两个有继承关系的Action中都标注有@BeforeResult方法,这个时候struts就会调用子类中的
标注有@BeforeResult的方法两次,这个问题可以从xwork的源代码com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor中发现问题所在。

 

 

实现中首先是找到所有的标注有@BeforeResult的方法,然后在子类的实现上依次调用找到的方法,所以就出现了调用两次的问题。解决办法比较简单就是避免这种结构出现在自己的类中,或者自己写一些代码检查是不是已经执行过@BeforeResult中的方法。
posted @ 2009-10-13 08:04  程序员天下  阅读(340)  评论(0编辑  收藏  举报