您的位置:首页 > 运维架构 > Apache

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

2016-10-20 17:08 507 查看
在使用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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ajax hibernate 异常 数据
相关文章推荐