注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

spring OpenSessionInViewFilter不起作用失效问题  

2013-01-18 20:32:37|  分类: struts |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
struts1.x

我原来用struts/spring/hibernate的时候同样使用OpenSessionInView,但是似乎没有robbin所说的问题啊。而且我在使用的时候,是ContextLoaderListener和ContextLoaderPlugIn一起用的。整个配置如下: 
1.首先是web.xml 
Java代码 
  1. <filter>  
  2.        <filter-name>OpenSessionInViewFilter</filter-name>  
  3.        <filter-class>org.springframework.orm.hibernate.support.OpenSessionInViewFilter</filter-class>  
  4.    </filter>  
  5.      
  6.    <filter-mapping>  
  7.        <filter-name>OpenSessionInViewFilter</filter-name>  
  8.        <url-pattern>/*</url-pattern>  
  9.    </filter-mapping>  
  10.      
  11.    <listener>  
  12.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  13. </listener>  
  14.   
  15. .....  


2. 然后是struts-config.xml: 
Java代码 
  1. <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">  
  2.     <set-property property="contextConfigLocation"   
  3.                   value="/WEB-INF/action-servlet.xml"   
  4.     />  
  5. </plug-in>  


其余部分省略。 

在上述配置下,使用OpenSessionInView似乎没有问题。 

不知道robbin所说的ContextLoaderListener和ContextLoaderPlugIn不应该同时使用是不是做得是如下的配置:(struts-config.xml) 

Java代码 
  1. <plug-in  
  2. className="org.springframework.web.struts.ContextLoaderPlugIn">  
  3. <set-property property="contextConfigLocation"  
  4. value="/WEB-INF/applicationContext.xml,  
  5. /WEB-INF/action-servlet.xml"/>  
  6. </plug-in>  


我尝试了一下,用这种配置时,OpenSessionInView的确失效了。 

我猜想,原因大概是这样:struts的这个plugIn,可能只是为了整合一个action-servlet.xml,将action-servlet.xml中的定义当作Spring的bean来使用,因此,在保存时,只要有action-servlet.xml的配置,就被保存到attrName中,而不是WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE中,所以,OpenSessionInView是取不到这个配置的。 

那么这个配置什么时候被取到呢?直觉告诉我,可能是和Action的Proxy有关。

解决办法: 
修改ContextLoaderPlugIn代码,在getServletContext().setAttribute(attrName, wac);这个地方加上一行代码: 
getServletContext().setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, wac); 

或者修改OpenSessionInViewFilter,让它按照attrName去取得spring配置。

struts2

openSessionInView 要配置在struts2的FilterDispatcher之前

正确的配置 
Java代码 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  3.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  4.   
  5.     <!-- openSessionInView 要配置在struts2的FilterDispatcher之前-->  
  6.     <filter>  
  7.         <filter-name>openSessionInView</filter-name>  
  8.         <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>  
  9.     </filter>  
  10.     <filter-mapping>  
  11.         <filter-name>openSessionInView</filter-name>  
  12.         <url-pattern>/*</url-pattern>  
  13.     </filter-mapping>  
  14.       
  15.     <!-- spring listener -->  
  16.     <listener>  
  17.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  18.     </listener>  
  19.   
  20.     <context-param>  
  21.         <param-name>contextConfigLocation</param-name>  
  22.         <param-value>classpath*:resources/spring/applicationContext.xml</param-value>  
  23.     </context-param>  
  24.       
  25.     <!--struts2-->  
  26.     <filter>  
  27.         <filter-name>struts</filter-name>  
  28.         <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
  29.     </filter>  
  30.     <filter-mapping>  
  31.         <filter-name>struts</filter-name>  
  32.         <url-pattern>/*</url-pattern>  
  33.     </filter-mapping>  
  34.   
  35.       
  36. </web-app>  

  评论这张
 
阅读(1069)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016