含有外键的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添加过滤字段。