最经在学习ssh零配置,在项目搭建的过程中,碰到了下面几个问题,所以自己记录一下:
1、action.java文件放在没有包含action文字命名的package中,框架找不到该action;原因是加入struts2-convention-plugin.jar后,该插件默认扫描的包是包名中包含action,actions,struts,struts2的包及其子包下的有注解的类,想要修改插件扫描的包名的话,可以通过下面这个常量:
Convention会试图从指定包中发现Action类。 <constant name="struts.convention.action.packages" value="com.home.prog" />
2、action.java文件中如果存在带事务注解的方法的话,@Resource注入的serice属性值总是为null,网上解释是【使用CGLib代理Action类后,使用@Autowired注入的service类将会为null,所以只有使用Spring的自动装配策略,action才能成功注入service接口】(具体原因不知道),但是经过实践下来,有两种解决方案:
a:在action中加上service属性的get,set方法(@resource不起作用);
b:在struts.xml文件中加上该常量,并设置为true(@resource起作用);
<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true" />
详细配置请参照附件,由于jar包比较大,所以附件中不包含所需的jar,需要jar包,请通过下面的连接下载: