最近在Tomcat中运行挺好的一个项目,搬到JBoss 5.1上就出现了N多问题,其中之一就是Could not execute action:……
看具体的错误,出现在访问私有变量ApplicationContext 的时候,应该就是上下文变量为空了。但是为什么是空呢?
钻了死胡同,一直认为是JBoss包跟项目包有冲突, 几个月的时间都在纠结中,差点就想放弃了,今天看了一下只是部分Action报错,有的Action还是可以用的,接下来就是要分析可用的Action和不可用的Action的区别,类和注解都正常,没有什么问题,剩下的问题就是配置文件了,经过仔细对比发现能正常使用的Action在Bean定义的时候都有下面例子中的红色字体部分,不能使用的都没有这个参数;
<bean id=”actionId” scope=”prototype”><property ……></property></bean>
添加上这个参数后就OK了,终于可以送一口气了。
接下来看一下Spring的这个参数的含义:
singleton:缺省值, 容器中同一个id只创建一个实例,什么时候用都是它;
prototype:原型,每次访问都会new一个对象;
session:回话有效;
request:请求;每次请求创建一个实例;
Struts要求Action作用域必须是prototype的,所以没得商量。