1、去掉@Autowired,改用set,get注入
2、将action纳入spring的ioc管理,即:struts.xml里action的class应写成spring里对应bean的id 。只有这样spring容器才会自动的将papermanager注入
3、修改Struts.xml文件的属性<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true" />,使自动注入总是有效
现在配置before/after 可以拦截action的方法。service要用get/set
execution(* com.eportal.action.background..*.add*(..))
|| execution(* com.eportal.action.background..*.login(..))
|| execution(* com.eportal.action.background..*.update(..))
|| execution(* com.eportal.action.background..*.deleted(..))
但是如果想要结果的成功或失败,用after-returning,不能拦截得到返回值。因为普通的login,add,update,delete都是void方法,如果改为有返回值的,则struts2无法返回匹配到页面。
如果将原先的add方法,拆为两个方法。
/**
* 角色新增保存
* @throws IOException
*/
public void add() throws IOException {
result = addMethod();
responseBody(result);
}
/**
* 角色新增保存方法
* @throws IOException
*/
@LogAnnotation(operateDescribe="角色新增")
public Map<String, Object> addMethod() throws IOException{
String msg = ValidateUtil.validate(getModel());
Sysroles role = getModel();
if (msg == null || msg.trim().length() == 0) {
} else {
result.put("code", 0);
result.put("msg", msg);
}
return result;
}
add接受addMethod的返回值,并printWrite。AOP只能拦截到add(),不能拦截到addMethod()。怎么改配置文件都不行,如改为拦截 .deletedMethod*(..) 或者.*Method(..)
将addMethod()放到service,AOP配置改为execution(* com.eportal.service..*.*Method(..))。可以达到想要的结果