使用PrintWriter.write输出Json,在前台怎么编译

q61777582 2015-10-08 02:27:35
这是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
请问各位大神该如何修改才可以。
...全文
1489 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯狂熊猫人 2015-10-09
  • 打赏
  • 举报
回复
引用 8 楼 q61777582 的回复:
[quote=引用 4 楼 crazypandariy 的回复:] 问题出在这一句代码:jsonArray.put(JsonMapper.toJsonString(object)); 你不应该把它转为String后,再放入jsonArray中。 你需要做的应该是这样:jsonDate.put("list", list);
这种方法我也试了,还是不好使。。。[/quote] 返回到前台页面上的数据没有\"了吧。 至于你说不好使,那是因为你代码的问题。你返回的是一个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;
					}
				}
			});
q61777582 2015-10-09
  • 打赏
  • 举报
回复
引用 4 楼 crazypandariy 的回复:
问题出在这一句代码:jsonArray.put(JsonMapper.toJsonString(object)); 你不应该把它转为String后,再放入jsonArray中。 你需要做的应该是这样:jsonDate.put("list", list);
这种方法我也试了,还是不好使。。。
q61777582 2015-10-09
  • 打赏
  • 举报
回复
引用 4 楼 crazypandariy 的回复:
问题出在这一句代码:jsonArray.put(JsonMapper.toJsonString(object)); 你不应该把它转为String后,再放入jsonArray中。 你需要做的应该是这样:jsonDate.put("list", list);
我试下。。。
q61777582 2015-10-09
  • 打赏
  • 举报
回复
引用 5 楼 u011575570 的回复:
你的ajax为什么不写dataType这个参数?
我加过,但是不好使啊
rick-he 2015-10-08
  • 打赏
  • 举报
回复
你的ajax为什么不写dataType这个参数?
疯狂熊猫人 2015-10-08
  • 打赏
  • 举报
回复
问题出在这一句代码:jsonArray.put(JsonMapper.toJsonString(object)); 你不应该把它转为String后,再放入jsonArray中。 你需要做的应该是这样:jsonDate.put("list", list);
豫让_______ 2015-10-08
  • 打赏
  • 举报
回复
试了下printWrite不能操作list =。=,嫌麻烦自己拼个字符串再用js分解吧。。
豫让_______ 2015-10-08
  • 打赏
  • 举报
回复
js操作jsonjson麻烦,我记得printWriter可以直接输出list吧
q61777582 2015-10-08
  • 打赏
  • 举报
回复
这是我在SpringMVC.xml中的设置

<!-- 将Jackson2HttpMessageConverter的默认格式化输出为false -->
			<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="supportedMediaTypes">
                	<list><value>application/json;charset=UTF-8</value></list>
                </property>
                <property name="prettyPrint" value="false"/>
                <property name="objectMapper">  
                    <bean class="com.thinkgem.jeesite.common.mapper.JsonMapper"></bean>  
                </property> 
            </bean>

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧