Struts2.x配合JSON和JQuery使用的简单实例

昨天一朋友问我一个关于JSON的问题,他是用Hibernate查询出2个实体对象(存在一对多的关系),然后放到Map集合中,最后再把Map放在List集合中。在调用JSON的
JSONArray.fromObject
方法时,出现
net.sf.json.JSONException: There is a cycle in the hierarchy

异常。在网上一顿狂查之后得知 是:“由于Hibernate中好多实体类都级联关系,也就是某个类,出现了别的类的引用对象充当属性。那么这样的话用JSON来进行处理会出现嵌套的异常”
看代码吧!
请求的JS代码如下:
$(document).ready(function(){
$("#submitRe").click(function(){
$.post("loginAction.action",null,callback)
})

callback=function(jsonData,textStats){
if("success"==textStats){
alert(jsonData);
}
}
})

处理请求类的Java代码为:
package com.accp.firststruts2.actions;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import net.sf.json.JsonConfig;
import net.sf.json.util.CycleDetectionStrategy;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;

import com.accp.firststruts2.dto.Users;
import com.opensymphony.xwork2.ActionSupport;
/**
*
* @author softceo945
*
*/
public class LoginAction extends ActionSupport implements ServletRequestAware,ServletResponseAware{

private static final long serialVersionUID = -6884393637128187643L;
HttpServletRequest request = null;
HttpServletResponse response = null;

public void setServletRequest(HttpServletRequest request) {
this.request = request;
}

public void setServletResponse(HttpServletResponse response) {
this.response = response;
}

public String execute() throws Exception {
List<Map<String,Object>> listAll = new ArrayList<Map<String,Object>>();//最终返回的数据集合
String str ="";//JSON文本
for (int i = 0; i < 10; i++) {
Users users = new Users();
users.setUsername("Users "+i);
users.setPsd(Math.random()+"");
users.setAge(i+15);
users.setSex('男');

Map<String,Object> a = new HashMap<String, Object>();
a.put(users.getUsername(), users);
listAll.add(a);
}
str=JSONArray.fromObject(listAll).toString();
//如果存在关联关系映射,即N-M,或M-M时,调用下面的代码来处理,时间关系,本文就没建立N-M,或M-M关系了
// JsonConfig config = new JsonConfig();
// config.setIgnoreDefaultExcludes(false);
// config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
// JSONArray JsonArr=JSONArray.fromObject(listAll, config);
// str=JsonArr.toString();

response.getWriter().write(str);
return null;
}
}

重点代码为:
//如果存在关联关系映射,即N-M,或M-M时,调用下面的代码来处理,时间关系,本文就没建立N-M,或M-M关系了
// JsonConfig config = new JsonConfig();
// config.setIgnoreDefaultExcludes(false);
// config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
// JSONArray JsonArr=JSONArray.fromObject(listAll, config);
// str=JsonArr.toString();

设置JSON-LIB的setCycleDetectionStrategy属性让其自己处理循环,省事但是数据过于复杂的话会引起数据溢出或者效率低下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值