含有外键的po,采用lazy加载模式时,session会在进入service(action)前关闭。
方案1:
可在web.xml中配置:
<!-- 延迟加载 -->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
注意要配置在struts的过滤器前。
方案2:
public <T> void write(List<T> list,String... values){
String [] ignore=null;
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");// 防止弹出的信息出现乱码
PrintWriter writer=null;
try {
writer = response.getWriter();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
if (values != null) {
ignore =new String[values.length];
for (int i = 0; i < values.length; i++) {
ignore[i]=values[i];
}
}
jsonConfig.setExcludes(ignore);
JSONArray json =JSONArray.fromObject(list, jsonConfig);
//防止因嵌套产生的死循环
System.out.println(json);
writer.print(json);
}
jsonConfig.setExcludes(ignore);为给json添加过滤字段。
本文深入探讨了在使用Spring框架处理数据库操作时,特别是涉及包含外键的实体对象(PO)时,如何通过在web.xml配置文件中启用OpenSessionInViewFilter来实现懒加载模式下session的持久化。详细介绍了配置步骤,包括在Struts过滤器前设置,以及在实际应用中如何利用write方法高效地进行数据输出,并提供了防止JSON嵌套导致的死循环的解决方案。
819

被折叠的 条评论
为什么被折叠?



