问题一:在struts+spring框架中,利用listener在服务器启动时读取某张表中的信息,保存到application中去。
原本的计划方案是将一个表中的所有数据存到application中,作为整个项目的存取的固定数据,但是结合了spring,问题出现了,怎么在spring中将listener注册,成为其受管的呢?因为我原来所有事务的处理都是交给spring的,而listener中也用到事务的处理,所以我得将事务注入listener中,才有了上面所说得spring注册listener。尝试了BeanFactoryAware,BeanFactoryPostProcessor等方法都没有实现这样得功能,似乎web.xml比applicationcontext.xml更早加载实例化。所以最后只能选择放在session中,每次登陆都要对数据库查询一遍,效率比较低。
问题二:在DAO中的findAll方法的结果。
在DAO中的findAll方法中,由于查询的user还和其他表module有关联,所以进行了left join fetch其他的表,但是当获取里面的数据时,发现了一个异常现象,(数据情况如下:13条用户记录,其中一条记录关联两条module记录)我期望获得的是user表里的13条记录的用户名,但是发现获得的数据总是有14条,而且和两条module记录关联的user重复出现了两次,我开始以为是我遍历的逻辑有问题,后来才发现原来对于left joinfetch后的数据,对于findAll的概念是不一样的,它认为那个用户关联另外两条记录后,返回的对象应该是不同的,应该作为两个对象来处理,所以原本的一个对象,由于关联,返回了两个对象,为了获得我想要的数据,我对findAll的结果进行了过滤,linkedArrayList没有用,linkedHashSet有用,这点我还是不很明白,有高人知道的请指教一二了。
问题三:在某个user明细的页面中,添加新的service信息后的页面转向。
user和service是一对多关系,在service的明细页面输入信息后,需要保存,那么页面的转向出现了问题。页面顺序如下:所有用户列表页面》》某个用户的明细页面(其中同时显示与user有关的所有service的列表》》service的明细页面,点击保存后的页面转向)。我从所有用户列表页面进入某个用户的明细页面中是通过findbyid查询出来的结果,进入service的明细页面后,在保存时,我首先要进入struts.cfg.xml下面的保存路径/saveservice进入相应action处理,action返回的路径又直接转向findbyid的action,问题是我无法将userid也顺便传过去,因为前面一个action直接转到xml的路径中,不能象页面转向时可以加参数userid,考虑良久后我决定增加一个forward.jsp作为一个过渡页面,前面一个action直接返回到forward.jsp,随后在forward.jsp中利用标签<jsp:forward>并加入userid后转向struts.cfg.xml中findbyid的action,再由action转向某个用户的明细页面。方法可能笨拙了点,但是毕竟解决了我的燃眉之急。