struts,ajax之间的json传递

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到前台:

[java]  view plain copy
  1. public String showUser(){  
  2.         User  user =  (User) userDAO.findByUsername("king").get(0);  
  3.           
  4.         JSONObject obj=new JSONObject(user);  
  5.         try {     
  6.             result=array.toString();<span style="white-space:pre">      </span>//得到序列化对象后的string<span style="white-space:pre">  </span>可以无setter、getter方法  
  7.             HttpServletResponse response = ServletActionContext.getResponse();  
  8.             response.setContentType("text/html"); // 火狐浏览器必须加上这句  
  9.             response.setCharacterEncoding("UTF-8");  
  10.             response.getWriter().write(result);  //直接write到前台,struts.xml的result里什么都不用配  
  11.         } catch (Exception e) {  
  12.             e.printStackTrace();  
  13.         }         
  14.         return Action.NONE;  
  15.       
  16.     }  
前台:

[javascript]  view plain copy
  1. $(document).ready(function(){  
  2.         $("#btn").click(function(){  
  3.             $.ajax({  
  4.                 type: "POST",  
  5.                 url: "user!showUser",  
  6.                 dateType: "json",             
  7.                 success: function(data,status){  
  8.                     alert(status);  
  9.             <span style="white-space:pre">  </span><span style="white-space:pre">   </span>alert("data"+data);  
  10. <span style="white-space:pre">                  </span>var json = eval("("+data+")");<span style="white-space:pre"> </span>//此处data即为action里的result,是字符串,要转为js对象<span style="white-space:pre">              </span>  
  11. <span style="white-space:pre">                  </span>alert("json.user.username"+json.user.username);            
  12.                           
  13.                     }//end of success  
  14.             });//end of ajax  
  15.         });//end of click  
  16.         });//end of ready  



二、不用write,直接return json,要配置struts.xml:

[java]  view plain copy
  1. public String showUser(){  
  2.         List users =  userDAO.findByUsername("king");  
  3.         User  user =  (User) userDAO.findByUsername("king").get(0);  
  4.         System.out.println("username"+username);  
  5.       
  6.           
  7.         try {  
[java]  view plain copy
  1. <span style="white-space:pre">          JSONObject obj=new JSONObject();  
  2. <span style="white-space:pre">          </span>obj.put("user", user);  
  3. <span style="white-space:pre">          </span>result=obj.toString();</span>  
[java]  view plain copy
  1. <span style="white-space:pre">          } catch (Exception e) {  
  2. <span style="white-space:pre">          </span>  
  3. <span style="white-space:pre">      </span>return "result";   
  4. <span style="white-space:pre">  </span>}            </span>//引号勿漏  

struts.xml:注意json-default和type=“json"

[html]  view plain copy
  1. <package name="userpk" extends="json-default" >  
  2.         <action name="user"  class="userAction">  
  3.            <span style="white-space:pre">   </span> <result type="json" name="result">  
[html]  view plain copy
  1. <span style="white-space:pre">      </result></span>  
[html]  view plain copy
  1. <span style="white-space:pre">      </action>   
  2. <span style="white-space:pre">  </span></package> </span>  
前台js:

[html]  view plain copy
  1. $(document).ready(function(){  
  2.         $("#btn").click(function(){  
  3.             $.ajax({  
  4.                 type: "POST",  
  5.                 url: "user!showUser",  
  6.                 dateType: "json",  
  7.                 data: {"username":"wang"},                
  8.                 success: function(data,status){  
  9.                     alert(status);  
[html]  view plain copy
  1. <span style="white-space:pre">                  alert("data"+data);<span style="white-space:pre">   </span>  
  2. <span style="white-space:pre">                  </span>var json = eval("("+data.result+")");<span style="white-space:pre">  //result在data中<span style="white-space:pre">    </span>             </span>  
  3. <span style="white-space:pre">                  </span>alert("data.username"+json.user.username);</span>  
[html]  view plain copy
  1. <span style="white-space:pre">                  }//end of success  
  2. <span style="white-space:pre">          </span>});//end of ajax  
  3. <span style="white-space:pre">      </span>});//end of click  
  4. <span style="white-space:pre">      </span>});//end of ready</span>  



三、JSONArray处理方法如上,同样是传输json字符串result,传输方法多种,产生字符串代码方法如下:

[java]  view plain copy
  1. JSONArray array = new JSONArray();  
  2.             array.addAll(users);//users为list  
  3.             result=array.toString();  


前台js处理稍有不同,success内方法代码如下:

[javascript]  view plain copy
  1. var json = eval("("+data.result+")");                     
  2.                               
  3.     $.each(json,function(index,item){                             
  4.         $("#result").append(index+":"+item.username+" "+item.userpassword+"<br/>");  
  5.     });  



四、List的处理可以用map方式,如下:

就直接上别人源码了:

[java]  view plain copy
  1. public String testByAction() {  
  2.         // dataMap中的数据将会被Struts2转换成JSON字符串,所以这里要先清空其中的数据  
  3.         dataMap.clear();  
  4.         User user = new User();  
  5.         user.setId("123");  
  6.         user.setName("JSONActionStruts2");  
  7.         user.setPassword("123");  
  8.         user.setSay("Hello world !");  
  9.         dataMap.put("user", user);  
  10.         // 放入一个是否操作成功的标识  
  11.         dataMap.put("success"true);  
  12.         // 返回结果  
  13.         return SUCCESS;  
  14.     }  

struts.xml:

[html]  view plain copy
  1. <package name="json" extends="json-default" namespace="/test">  
  2.         <action name="testByAction"  
  3.             class="cn.ysh.studio.struts2.json.demo.action.UserAction" method="testByAction">  
  4.             <result type="json">  
  5.                 <!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 -->  
  6.                 <param name="root">dataMap</param>  
  7.             </result>  
  8.         </action>  
  9. </package>  

});







原文链接:http://blog.csdn.net/kamouswjw/article/details/8117377

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值