1.ssh中使用ajax发生的异常:org.apache.struts2.json.JSONException

在使用ajax向前台进行数据传输的时候突然报除了一个org.apache.struts2.json.JSONException。当时进行很长时间的纠错。但是都没有发现问题的症结所在。
首先我把错误的信息和解决的方法贴出。然后再来考虑究竟是因为什么。


报错信息:
错误信息
解决方法:
将ajax查询的数据的hibernate映射文件更改为
lazy=”false”
例如我查询的是学生信息那么我需要将Student.hbm.xml中添加lazy=”false”
并且需要为所有与student相关的属性对象对应的映射文件设置成lazy=”false”


错误原因:
Hibernate的懒加载引起的。你传递的数据中有引用类型的数据采用了懒加载机制。

我的数据库结构中

Student拥有Role属性,Grade属性和Course属性。

当中间表t_user_course中没有数据时,运行一切正常。
但是当t_user_course表中有数据,且数据与所传送的Student对象有关时,因为懒加载,在Action中获取的Student对象中的course属性中的set集合中会存在Student对象的引用,但是student其实还并未加载。

只有当用到时,容器才再次发出sql请求进行加载,但是在json插件对Student进行处理以转换成json格式时,Hibernate中Session早已关闭,这样Student信息便加载不成功,而它又无法对set集合中空的引用进行处理,所以便抛出了JSONException。


使用ajax的小贴士:
1.在配置action中,action必须继承自json-default才行。
2.传回前台的data数据本身已经是一个数组了,直接进行处理就可以。
3.如果使用JSONArray进行接收数据是因为多对多的关系,经常会发生循环的问题。需要进行设置。

JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
JSONObject json =JSONObject.fromObject(course, jsonConfig);
String result = json.toString();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值