以前在页面上要保存多个对象时,我一般在页面用js把这些数据组装起来,然后到服务器再自己写方法解析,比如下
面这个页面:
<body>
<form action="userAction.do?method=add" method="post" name="userForm">
<input type="button" value="添加好友" onclick="addF()" />
<div id="friend"></div>
<input type="text" name="name" /><input type="text" name="age" />
<select name="sex">
<option value="0">男</option>
<option value="1">女</option>
</select><br/>
<input type="text" name="name" /><input type="text" name="age" />
<select name="sex">
<option value="0">男</option>
<option value="1">女</option>
</select><br/>
<input type="text" name="name" /><input type="text" name="age" />
<select name="sex">
<option value="0">男</option>
面这个页面:
<body>
<form action="userAction.do?method=add" method="post" name="userForm">
<input type="button" value="添加好友" onclick="addF()" />
<div id="friend"></div>
<input type="text" name="name" /><input type="text" name="age" />
<select name="sex">
<option value="0">男</option>
<option value="1">女</option>
</select><br/>
<input type="text" name="name" /><input type="text" name="age" />
<select name="sex">
<option value="0">男</option>
<option value="1">女</option>
</select><br/>
<input type="text" name="name" /><input type="text" name="age" />
<select name="sex">
<option value="0">男</option>
<option value="1">女</option>
</select><br/>
<input type="hidden" name="userObj" id="userObj" value=""/>
<input type="button" onclick="sub('userForm')" value="提交"/>
</form>
</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,并传到服务器上。
在服务器端的解析代码大致为:()
String str = request.getParameter("userObj");
String[] strArray = str.split(":");
Person person = new Person();
for(String obj : strArray){
String[] personArray = obj.split(",");
person.setName(personArray[0]);
person.setAge(personArray[1]);
person.setSex(personArray[2]);
personService.insert(person);
}
但这样实现有个漏洞,就是当页面输入框中包含','时,那服务器解析时就不能将正确的值赋给person对象。
这几天研究了下json,就可以避免这个问题。而且js和服务器端代码可以缩减很多。
</select><br/>
<input type="hidden" name="userObj" id="userObj" value=""/>
<input type="button" onclick="sub('userForm')" value="提交"/>
</form>
</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,并传到服务器上。
在服务器端的解析代码大致为:()
String str = request.getParameter("userObj");
String[] strArray = str.split(":");
Person person = new Person();
for(String obj : strArray){
String[] personArray = obj.split(",");
person.setName(personArray[0]);
person.setAge(personArray[1]);
person.setSex(personArray[2]);
personService.insert(person);
}
但这样实现有个漏洞,就是当页面输入框中包含','时,那服务器解析时就不能将正确的值赋给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然后提交表单.
var objs = [{name:"tom",age:20,sex:1},{name:"jacky",age:21,sex:},{name:"lily",age:22,sex:1}]
document.getElementById("userObj").value = objs;
document.forms["userForm"].submit();
在服务器端的解析代码为:
String str = request.getParameter("userObj");
List<Person> persons = new ArrayList<Person>();
if (str != null && !"".equals(str))
list = getList(str,new Person());
for(Person p : list)
personService.insert(p);
下面是封装的方法
@SuppressWarnings("unchecked")
public <T> List<T> getList(String str,T t){
JSONArray array = JSONArray.fromObject(str);//将str转换成json对象
JsonConfig jsonConfig = new JsonConfig();//参数设置
jsonConfig.setRootClass(t.getClass());//设置array中的对象类型
List<T> list = (List<T>)JSONArray.toCollection(array, jsonConfig);//将数组转换成T类型的集合
return list;
}
在这就不多说了,可以参考
http://json-lib.sourceforge.net/
json数据格式很简单,比如{name:"tom",age:20,sex:1}就表示一个person对象。详细可以参考json官网
http://www.json.org
在js中我把几个preson对象组装成一个数组,并把这个字符串赋给userObj然后提交表单.
var objs = [{name:"tom",age:20,sex:1},{name:"jacky",age:21,sex:},{name:"lily",age:22,sex:1}]
document.getElementById("userObj").value = objs;
document.forms["userForm"].submit();
在服务器端的解析代码为:
String str = request.getParameter("userObj");
List<Person> persons = new ArrayList<Person>();
if (str != null && !"".equals(str))
list = getList(str,new Person());
for(Person p : list)
personService.insert(p);
下面是封装的方法
@SuppressWarnings("unchecked")
public <T> List<T> getList(String str,T t){
JSONArray array = JSONArray.fromObject(str);//将str转换成json对象
JsonConfig jsonConfig = new JsonConfig();//参数设置
jsonConfig.setRootClass(t.getClass());//设置array中的对象类型
List<T> list = (List<T>)JSONArray.toCollection(array, jsonConfig);//将数组转换成T类型的集合
return list;
}
本文介绍了一种利用JSON格式简化Web应用中多个对象传递的方法,对比了传统方式与JSON方式的优劣,并提供了具体的实现案例。

被折叠的 条评论
为什么被折叠?



