我对struts2和aop有一个奇怪的问题。我需要拦截某些struts2操作来检查一些自定义设置。这些操作被截获,但它会破坏所有页面参数/表单值等:
AOP配置是:
<aop:advisor id="associateModuleCheck" advice-ref="associateModuleAdvice" pointcut="execution(* uk.co.company.package.webapp.action.*.ModuleA*.*(..))" order="1"/>
方法拦截器
public Object invoke(MethodInvocation invocation) throws Throwable {
Class<?> targetClass = invocation.getThis().getClass();
// DO stuff
return invocation.proceed();
}
基本上我可以看到动作方法被截获,但当它返回到页面时,它会破坏所有表单值。 (有些动作甚至无法到达MethodInterceptor方法,但我可以从Spring日志中看到它基本上被拦截了):
候选人是:&#39; /namespacebbb/ModuleAction/method.action' ;;模式是 / **;匹配=真
我之所以不使用Struts2拦截器,是因为我可以使用Spring AOP一次配置大量动作。
如果我删除拦截器一切正常。以前有人做过这个吗?知道什么是错的吗?
更新
虽然我最终使用了struts2拦截器,但这个问题仍然存在。我找到了这个春季论坛问题,这与我的问题非常相似:
http://forum.spring.io/forum/spring-projects/aop/38625-aop-struts-2-help
答案 0 :(得分:0)
经过一番挖掘后,我想我发现了这个问题(如果你使用Spring来帮助AOP,即使你不是你可能需要一个不同的ObjectFactory),还有它的长短之处是你需要确保struts ObjectFactory设置正确:
<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />
<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true"/>
或
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true"/>