OpenSessionInViewFilter失效问题解决(SSH2)

今天在用Hibernate延迟加载时,显示到界面出现如下问题:
org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed

原因: 在界面加载数据时, session已经关闭,故报此错. 此前的对象只是代理对象(只有ID值)

故使用Spring 里的 OpenSessionInViewFilter 来解决此问题

在web.xml里配置

Xml代码:
  1. <!--Hibernate Open Session in View Filter-->   
  2. < filter >   
  3.      < filter-name > hibernateFilter </ filter-name >   
  4.      < filter-class > org.springframework.orm.hibernate3.support.OpenSessionInViewFilter </ filter-class >   
  5. </ filter >   
  6. < filter-mapping >   
  7.      < filter-name > hibernateFilter </ filter-name >   
  8.      < url-pattern > /* </ url-pattern >   
  9. </ filter-mapping >   

再测试, 问题依然存在,,, 纳闷....... 后来分析,再google... 终于发现问题出在Struts2上....

现在的web.xml里,我是把OpenSessionInViewFilter的配置放在Struts2后面的.

更改下前后顺序 , 神奇的解决了:)   正确的配置顺序如下:

Xml代码 :
  1. <!--Hibernate Open Session in View Filter 注意要放在Struts2配置前面-->   
  2. < filter >   
  3.      < filter-name > hibernateFilter </ filter-name >   
  4.      < filter-class > org.springframework.orm.hibernate3.support.OpenSessionInViewFilter </ filter-class >   
  5. </ filter >   
  6. < filter-mapping >   
  7.      < filter-name > hibernateFilter </ filter-name >   
  8.      < url-pattern > /* </ url-pattern >   
  9. </ filter-mapping >   
  10.   
  11. < filter >      
  12.      < filter-name > Struts2 </ filter-name >      
  13.      < filter-class > org.apache.struts2.dispatcher.FilterDispatcher </ filter-class >      
  14. </ filter >      
  15. < filter-mapping >      
  16.      < filter-name > Struts2 </ filter-name >      
  17.      < url-pattern > /* </ url-pattern >      
  18. </ filter-mapping >    

猜你喜欢

转载自guobin6125.iteye.com/blog/1600586
今日推荐