struts2.0里写拦截器的时候,如果被拦截的action无异常的执行完毕,并返回了一个返回值,而拦截器试图跳转到另一个返回值上去时,不能简单的用拦截器的return xxx来实现。这样不起作用。
原因是使用 invocation.invoke();的时候,不仅执行了action内部的逻辑,而且会根据action返回的结果去组装result。因此,在拦截器继续执行后续逻辑时,返回结果已经被确定了。这样一来,即使拦截器返回了其它的resultString,也改变不了result了。
正确的实现方法在寻找中。
CH找到了解决的方法:
ActionInvocationWrapper argWrapper = new ActionInvocationWrapper(arg0);
// 单独执行Action
result = argWrapper.executeAction();
// 单独执行Result
argWrapper.executeResult();

这样就把action的逻辑和result的逻辑拆开。在这两个逻辑中间就可以插入拦截器的处理逻辑了。