美文网首页
OpenSessionInView

OpenSessionInView

作者: 紫荆秋雪_文 | 来源:发表于2019-10-06 23:20 被阅读0次

一、问题no Session

问题:Employee对象中有一个部门Department字段,当在表现成中使用使用Employee对象中Department字段时,会报no Session

原因:在session已经关闭之后,才去获取延时加载对象,事务本来就该在service层开启或关闭,但是session在service就关闭,因为关闭太早,所以在表现层中就没有session,没有session在获取延时加载对象的时候,报错no session


on Session.png

解决方案:让session在请求的时候打开,在响应完毕之后在关闭

OpenSessionInView.png

在webxml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--告诉监听器去哪里去找Spring的配置文件-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

    <!--系统启动,就初始化Spring容器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!--前端控制器-->
    <filter>
        <filter-name>OSIV</filter-name>
        <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>OSIV</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--前端控制器-->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

相关文章

网友评论

      本文标题:OpenSessionInView

      本文链接:https://www.haomeiwen.com/subject/nwqbuctx.html