假如一个User对象包含frameWorks对象 两者关系是1-N,那么dwr将加载一个对象所有的属性!
就会出现如下错误提示:
现在我所了解的解决此方案有以下几种:
1、在User.xml关联frameWorks配置文件中将lazy设置为false lazy="false"
2、在dwr.xml文件将converter="bean" 修改为converter="hibernate3"
3、在dwr.xml文件将 "convert" 下添加 "param" 指定需要加载的属性名称
4、在web.xml文件添加 openSessionInViewFilter
第一种方法明显的不好,如果设置了lazy=false后不在灵活!
第二种方法设置converter="hibernate3"后,在js中将无法获取model的关联属性了,调用后也是空值
第三种方法将convert中添加param这样做也算一种比较好的解决方案,但必须在配置文件中写死,如果以后还需要调用关联的方法须在一次在配置一个名字不相同的同一个model
第四种个人认为是最好的解决办法,request打开session,response关闭session,虽然据说openSessionInViewFilter有各种各样的毛病,本人到现在也还未出现过比较严重的问题!
举个例子把:
model
User.java
FrameWork.java
Dwr
UserAjax.java
service层我直接忽略也就是读取dao层得数据方法
jsp
test.jsp
dwr.xml
web.xml
过滤dwr请求 只需要添加/dwr/*就可以解决问题