参考 : http://www.codeceo.com/article/springmvc-4-ways.html
HTML
<form action="/user/submitUserList_2" method="post">
ID:<input type="text" name="users[0].id"><br/>
Username:<input type="text" name="users[0].name"><br/>
Password:<input type="text" name="users[0].pwd"><br/><br/>
ID:<input type="text" name="users[2].id"><br/>
Username:<input type="text" name="users[2].name"><br/>
Password:<input type="text" name="users[2].pwd"><br/><br/>
<input type="submit" value="Submit">
</form>
Java代码:
除了刚才公用的User类,还要封装一个User的容器类UserModel:
public class UserModel {
private List<User> users;
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
public UserModel(List<User> users) {
super();
this.users = users;
}
public UserModel() {
super();
}
}
SpringMVC Controller方法:
@RequestMapping(value = "/submitUserList_2", method ={RequestMethod.POST})
@ResponseBody
public String submitUserList_2(UserModel users)throws Exception{
String result = "";
List<User> userList = users.getUsers();
if(userList == null || userList.size() <= 0){ return "No any ID.中文"; }
result = this.showUserList(userList);
return result;
}
优点 1、方便快捷页面不复杂 2、好存入一些总览信息 例如 用户的 籍贯 等信息(因为它包了一层) 3、可以多层嵌套如 : users[0].addres[0].str ; users[0].addres[0].code 缺点 : 1、外面需包一层 2 、 这种方法在HMTL中需要给name属性添加[下标],如果下标有跨度的话(比如第一组控件下标是0,第二组下标是2),那么SpringMVC里其实的是0到2三个对象的,默认下标是1的那个对象全为null值。 3、重复模块需基本一致
<form method="post">
ID:<input type="text" name="id"><br/>
Username:<input type="text" name="name"><br/>
Password:<input type="text" name="pwd"><br/>
jsonStr : <input type="text" name="pwd" value="['{\\"aa\\":123}','{\\"aa\\":123}']"><br/>
</form>
<form method="post">
ID:<input type="text" name="id"><br/>
Username:<input type="text" name="name"><br/>
Password:<input type="text" name="pwd"><br/>
jsonStr : <input type="text" name="pwd" value="['{\\"aa\\":123}','{\\"aa\\":123}']"><br/>
</form>
JS 代码
//form表当序列化json
$.fn.serializeObject = function () {
var o = {};
var a = this.serializeArray();
$.each(a, function () {
if (o[this.name]) {
o[this.name] = o[this.name] + "$" + this.value;
} else {
o[this.name] = this.value || '';
}
});
return o;
};
function commit(){
var arr = [];
$("form").each(function () {
arr.push($(this).serializeObject());
})
$.ajax({
type: "post",
url: "",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(arr),
success: function (result) {
},
error: function () {
alert("error")
}
});
}
@RequestMapping(value = "/saveGiftBagAndAward")
@ResponseBody
public Result saveGiftBagAndAward(@RequestBody List<User> users, Model model){
}
优点 1、外面无需报一层 2、如果传递json字符串数组代码灵活
缺点 : 1、存入一些总览信息不好存入 例如 用户的 籍贯 等信息。
总结 : 还是第二种方式优雅 灵活 兼容性高