sping+struts2中配置Action的bean中scope="prototype"的作用

      昨天发了一篇文章《奇妙的paramsPrepareParamsStack——Struts2中ModelDriven问题》其实那也不是原因是根本,那个解决方法还是一样如我前面采用的方法:在每次转向之前把对象清空然后初始化一下。只是昨天是在每次调用方法之前在值注入之前先清空初始化了一下。

      发现自己在开发中就如田埂上突然冒出个洞,田埂上的田里的水流入我的田里,可我根本不去查明到底是老鼠,蛇还是其他虫子打的洞,而是发现一个洞补一个洞的做法。——真是大忌啊!

 

      今天又搜索了一下才发现原来是这个问题:

     下面是struts2+hibernate+spring配置文件的一部分,以前都是仿造已经写好的bean的配置。有一次 scope="prototype"忘记写了结果出了问题 ,其默认是scope="singleton",唯一的。
      项目中对一个表的增删该操作是用一个action,这个action有add,update,delete,save这些方法,添加和修改是共用一个页面,当页面得到id时代表进行的修改操作,反之是添加操作。因为在配置spring的bean是忘了写scope="prototype"所以每次添加时都显示最后一次访问过的记录。
       找了很长时间,原来是spring bean出了问题。 scope="prototype" 会在该类型的对象被请求时创建一个新的action对象。如果没有配置scope=prototype则添加的时候不会新建一个action,他任然会保留上次访问的过记录的信息。
prototype">






   

你可能感兴趣的:(Struts)