当前位置: 代码迷 >> J2EE >> 使用PrintWriter.write输出Json,在前台如何编译
  详细解决方案

使用PrintWriter.write输出Json,在前台如何编译

热度:54   发布时间:2016-04-17 23:00:54.0
使用PrintWriter.write输出Json,在前台怎么编译
这是Controller代码

@RequiresPermissions("expertinfo:expInfo:view")
@RequestMapping(value="init")
public void init(HttpServletRequest request,HttpServletResponse response){
List<ExpInfo> expInfos = expInfoService.getRandom(request.getParameter("all")==null?"":request.getParameter("all"));
/* 设置格式为text/json */
response.setContentType("text/json");
/* 设置字符集为'UTF-8' */
response.setCharacterEncoding("UTF-8");
try {
PrintWriter write = response.getWriter();
write.write(getJson(expInfos, 10));
write.flush();
write.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@ResponseBody
public String getJson(List list,int num){
JSONArray jsonArray = new JSONArray();
JSONObject jsonDate = new JSONObject();
for(int i = 0 ; i < list.size() ; i++){
Object object = list.get(i);
jsonArray.put(JsonMapper.toJsonString(object));
}
jsonDate.put("total", num);
jsonDate.put("list", jsonArray);
return jsonDate.toString();
}


以下为javascript代码

Ext.Ajax
.request({
url : "ExpInfoController/Init",
success : function(response, option) {
var jlist = eval('(' + response.responseText + ')');
for ( var i = 1; i < 11; i++) {
document.getElementById(i.toString() + "1").innerHTML = jlist.list[i - 1].expertId;
document.getElementById(i.toString() + "2").innerHTML = jlist.list[i - 1].expertName;
document.getElementById(i.toString() + "3").innerHTML = jlist.list[i - 1].expertSex;
document.getElementById(i.toString() + "4").innerHTML = jlist.list[i - 1].expertAge;
document.getElementById(i.toString() + "5").innerHTML = jlist.list[i - 1].category.categoryName;
document.getElementById(i.toString() + "6").innerHTML = jlist.list[i - 1].expertRemark;
if(jlist.list[i - 1].check==1)
document.getElementById(i.toString()).checked=true;
}
}
});


我也导入了ext-all.js和ext-base.js两个文件。
但是在我测试的时候发现无论在JSP中写什么,页面显示的永远都是下图的样子

使用的框架为Spring MVC,浏览器为360
请问各位大神该如何修改才可以。
------解决思路----------------------
引用:
Quote: 引用:

问题出在这一句代码:jsonArray.put(JsonMapper.toJsonString(object));
你不应该把它转为String后,再放入jsonArray中。

你需要做的应该是这样:jsonDate.put("list", list);


这种方法我也试了,还是不好使。。。


返回到前台页面上的数据没有\"了吧。

至于你说不好使,那是因为你代码的问题。你返回的是一个Map类型的对象(对应js的Object),但是你却把它直接当做数组进行遍历。
修改为如下代码:

Ext.Ajax
.request({
url : "ExpInfoController/Init",
success : function(response, option) {
var jlist = eval('(' + response.responseText + ')').list;//eval函数转换后其实是一个Object对象{total:xxx,list:[]},你这里其实是要使用list属性的值,所以,你必须明确的将转换后的对象的list属性值赋值给jlist
for ( var i = 1; i < 11; i++) {
document.getElementById(i.toString() + "1").innerHTML = jlist.list[i - 1].expertId;
document.getElementById(i.toString() + "2").innerHTML = jlist.list[i - 1].expertName;
document.getElementById(i.toString() + "3").innerHTML = jlist.list[i - 1].expertSex;
document.getElementById(i.toString() + "4").innerHTML = jlist.list[i - 1].expertAge;
document.getElementById(i.toString() + "5").innerHTML = jlist.list[i - 1].category.categoryName;
document.getElementById(i.toString() + "6").innerHTML = jlist.list[i - 1].expertRemark;
if(jlist.list[i - 1].check==1)
document.getElementById(i.toString()).checked=true;
}
}
});
  相关解决方案