今天遇到一个很蠢的问题,所以写下来给自己留个教训。
最近在写一个系统,用struts2+spring+Hibernate,无意中发现其中有一个action的验证信息会重复出现,因为这个action要完成的功能很简单,所以写的时候也没太留意。而不但信息会重复出现,更夸张的是,第一次验证失败后返回到input页面后,第二次就算是输入正确,系统也不会正常工作,永远在input页面,错误信息会不停的累加。关了浏览器重开还是这样,要重启服务器才行,汗。
一想便知是容器出了问题,去配置文件里看了看,没发现什么不对啊!和别的action一样啊!无奈中,又由于经过好几个星期的奋战,此时代码已经很多,一时找起来很困难,想行点懒事,便想上网看看。
没想到,还真有一朋友遇到我这样的事,看他的帖,症状和我的百分百雷同,真想和他握握手。
而下面回帖的人这样写道:
你的action是不是被spring代管了?
我一看,是啊,我的action是被spring代管了。
接着他又写道:
你的action class是不是用的bean 的id?
我一边看还一边点头,是啊,我的真是这样的,怎么这么了解我!(其实人人都这样写)
最后他说:
把你action 的class改成全路径,问题就会得到解决。
是吗?我当时想,那就是说不要spring代管了,那我还要向这个action 注属性的,这样改了肯定注不进去了。
正如我所说的,这样改了验证的问题是得到解决了,可是属性注不进去了。那不是正了一样又歪了一样,问题并没有得到根本性的解决。
正在有点想抓狂中,却无意发现我的这个bean怎么没有写scope="prototype",这个属性是告诉spring,每来一个action给我产生一个新的实例。就这么简单,问题得以真正的解决。这个蠢问题是粗心犯下的低级错误,真想给自己两下。