var json = eval("("+data.result+")");//result在data中 alert("array:"+json[0].username); $.each(json,function(index,item){ $("#result").append(index+":"+item.username+" "+item.userpassword+"<br/>"); });
作为一个刚接触json,这几天被json和struts弄得晕头转向的新手,到现在终于有点感悟,终于把测试的demo写了几种方法,终于有点清楚……
也感谢网上各位前辈的贴子代码,所以更要总结一番,给像我一样的后来者一点方便。。
对新手看了一定会有收获的。。有问题大家请指正~
json作为一种被广泛应用的数据交换格式,简单点说就是一串被序列化的字符串。
struts的action和前台的js之间的json传递,主要也就是这个字符串的封装和解析。。
struts把对象(包括List等)序列化为一个字符串,再传给js,js通过var json = eval("("+xxx+")");的方式解析json字符串为js对象,并使用其属性是较常用的一直方式。实现方式有:
一、action中通过根据源对象user新建JSONObject对象obj,再把obj转为string后write到前台:
public String showUser(){ User user = (User) userDAO.findByUsername("king").get(0); JSONObject obj=new JSONObject(user); try { result=array.toString(); //得到序列化对象后的string 可以无setter、getter方法 HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType("text/html"); // 火狐浏览器必须加上这句 response.setCharacterEncoding("UTF-8"); response.getWriter().write(result); //直接write到前台,struts.xml的result里什么都不用配 } catch (Exception e) { e.printStackTrace(); } return Action.NONE; }前台:
$(document).ready(function(){ $("#btn").click(function(){ $.ajax({ type: "POST", url: "user!showUser", dateType: "json", success: function(data,status){ alert(status); alert("data"+data); var json = eval("("+data+")"); //此处data即为action里的result,是字符串,要转为js对象 alert("json.user.username"+json.user.username); }//end of success });//end of ajax });//end of click });//end of ready
public String showUser(){ List users = userDAO.findByUsername("king"); User user = (User) userDAO.findByUsername("king").get(0); System.out.println("username"+username); try {
JSONObject obj=new JSONObject();
obj.put("user", user);
result=obj.toString();
} catch (Exception e) {
return "result";
} //引号勿漏
struts.xml:注意json-default和type=“json"
<package name="userpk" extends="json-default" >
<action name="user" class="userAction">
<result type="json" name="result">
</result>
</action>
</package>
前台js:
$(document).ready(function(){ $("#btn").click(function(){ $.ajax({ type: "POST", url: "user!showUser", dateType: "json", data: {"username":"wang"}, success: function(data,status){ alert(status);
alert("data"+data);
var json = eval("("+data.result+")"); //result在data中
alert("data.username"+json.user.username);
}//end of success
});//end of ajax
});//end of click
});//end of ready
JSONArray array = new JSONArray(); array.addAll(users);//users为list result=array.toString();
var json = eval("("+data.result+")"); $.each(json,function(index,item){ $("#result").append(index+":"+item.username+" "+item.userpassword+"<br/>"); });
四、List的处理可以用map方式,如下:
就直接上别人源码了:
public String testByAction() { // dataMap中的数据将会被Struts2转换成JSON字符串,所以这里要先清空其中的数据 dataMap.clear(); User user = new User(); user.setId("123"); user.setName("JSONActionStruts2"); user.setPassword("123"); user.setSay("Hello world !"); dataMap.put("user", user); // 放入一个是否操作成功的标识 dataMap.put("success", true); // 返回结果 return SUCCESS; }
struts.xml:
<package name="json" extends="json-default" namespace="/test"> <action name="testByAction" class="cn.ysh.studio.struts2.json.demo.action.UserAction" method="testByAction"> <result type="json"> <!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 --> <param name="root">dataMap</param> </result> </action> </package>
其它众多方法,大家自己研究把。。
参考:http://www.linuxso.com/architecture/15768.html
- 1楼zmofcsdn4天前 10:21
- 收藏