在SSH项目中进行数据库查询,控制台报错出现no Session错误信息:如下图
这里我从两个场景说明no Session问题及其解决方案:
场景一:
web层页面端由easyui实现,实体类Courier对象有set集合,集合里有FixedArea对象,下图为Courier实体类中的set集合属性:
页面端发出查询所有Courier请求,在web层Action中需要将从数据库中查询到的Courier对象集合转成json格式数据,然后再页面端展示,此时控制台报错,如图一。
原因:
在转Courier对象为json数据格式的时候,对象中有fixedareas集合属性,而jpa加载策略为延迟加载。在Action中转fixedareas集合为json数据,通过代理对象查询数据库,此时Action中session已经关闭。
解决方法:
在源头解决,出现问题是因为在转fixedareas集合的时候,而在页面端展示的数据中没有fixedareas,所以将fixedareas集合属性排除掉不转json,具体做法如图3红框部分:
场景二:
从数据库中查询到数据,在Action中数据被压入值栈,页面端从值栈中取数据,此时控制台报错。
原因:
和上面场景原因类似,延时加载,session从数据库中查找的对象是一个代理对象,只有id,当在页面端取数据时,才真正进行查询数据库,而此时session已经关闭。
解决方法:
采用延长session的存活时间,在web.xml中配置OpenSessionInViewFilter