Json实现页面多个对象的保存

以前在页面上要保存多个对象时,我一般在页面用js把这些数据组装起来,然后到服务器再自己写方法解析,比如下

面这个页面:

 

Java代码   收藏代码
  1. <body>  
  2.    <form action="userAction.do?method=add" method="post" name="userForm">  
  3.    <input type="button" value="添加好友" οnclick="addF()" />  
  4.    <div id="friend"></div>  
  5.    <input type="text" name="name" /><input type="text" name="age" />  
  6.    <select name="sex">  
  7.       <option value="0">男</option>  
  8.       <option value="1">女</option>  
  9.    </select><br/>  
  10.    <input type="text" name="name" /><input type="text" name="age" />  
  11.    <select name="sex">  
  12.       <option value="0">男</option>  
  13.       <option value="1">女</option>  
  14.    </select><br/>  
  15.    <input type="text" name="name" /><input type="text" name="age" />  
  16.    <select name="sex">  
  17.       <option value="0">男</option>  
  18.       <option value="1">女</option>  
  19.    </select><br/>  
  20.    <input type="hidden" name="userObj" id="userObj" value=""/>  
  21.    <input type="button" οnclick="sub('userForm')" value="提交"/>  
  22.    </form>  
  23. </body>  

 

nage,age,sex对应Person对象的三个属性,也就是要保存三个对象到数据库中。

假设页面上三个对象的属性值分别为"tom" 20 1, "jacky" 21 0, "lily" 22 1.则在js中通过','将这些值分隔,组装的字符串为

("tom",20,1):("jacky",21,0):("lily",22,1)把这个值赋给userObj,并传到服务器上。

在服务器端的解析代码大致为:

 

Java代码   收藏代码
  1. String str = request.getParameter("userObj");  
  2. String[] strArray = str.split(":");  
  3. Person person = new Person();  
  4. for(String obj : strArray){  
  5.      String[] personArray = obj.split(",");  
  6.      person.setName(personArray[0]);  
  7.      person.setAge(personArray[1]);  
  8.      person.setSex(personArray[2]);  
  9.      personService.insert(person);  
  10. }  

 

但这样实现有个漏洞,就是当页面输入框中包含','时,那服务器解析时就不能将正确的值赋给person对象。

这几天研究了下json,就可以避免这个问题。而且js和服务器端代码可以缩减很多。

json java解析有十几种,我用的是json-lib,觉得他功能比较强大,有关它的语法官网上介绍得很详细,

在这就不多说了,可以参考http://json-lib.sourceforge.net/

json数据格式很简单,比如{name:"tom",age:20,sex:1}就表示一个person对象。详细可以参考json官网

http://www.json.org

在js中我把几个preson对象组装成一个数组,并把这个字符串赋给userObj然后提交表单.

 

Java代码   收藏代码
  1. var objs = [{name:"tom",age:20,sex:1},{name:"jacky",age:21,sex:},{name:"lily",age:22,sex:1}]  
  2. document.getElementById("userObj").value = objs;  
  3. document.forms["userForm"].submit();  

 

在服务器端的解析代码为:

Java代码   收藏代码
  1. String str = request.getParameter("userObj");  
  2. List<Person> persons = new ArrayList<Person>();  
  3. if (str != null && !"".equals(str))   
  4.      list = getList(str,new Person());  
  5. for(Person p : list)  
  6.      personService.insert(p);  
  7. 下面是封装的方法  
  8. @SuppressWarnings("unchecked")  
  9. public <T> List<T> getList(String str,T t){  
  10.      JSONArray array = JSONArray.fromObject(str);//将str转换成json对象  
  11.      JsonConfig jsonConfig = new JsonConfig();//参数设置  
  12.      jsonConfig.setRootClass(t.getClass());//设置array中的对象类型  
  13.      List<T> list = (List<T>)JSONArray.toCollection(array, jsonConfig);//将数组转换成T类型的集合  
  14.      return list;  
  15. }  
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值