表单里同时一次性提交多个

4种方法让SpringMVC接收多个对象

标签: 表单提交数组接收BeanListMoList接收Json字符串提交

问题背景:

我要在一个表单里同时一次性提交多名乘客的个人信息到SpringMVC,前端HTML和SpringMVC Controller里该如何处理?

第1种方法:表单提交,以字段数组接收;

第2种方法:表单提交,以BeanListModel接收;

第3种方法:将Json对象序列化成Json字符串提交,以List接收;

第4种方法:将表单对象序列化成Json字符串提交,以List接收;

第4种方法其实是第3种方法的升级,就是将表单转成Json对象,再转成Json字符串提交;

然而,第4种方法还不支持含有多选控件表单的提交,故应该还有第5种加强版的方法。

以上4种方法都共用同一个User实体类,代码如下:

public class User {

private Integer id;

private String name;

private String pwd;

@Override

public String toString() {

return “User{” +

“id=” + id +

“, name=’” + name + ‘’’ +

“, pwd=’” + pwd + ‘’’ +

‘}’;

}

// …后面还有getter、setter方法,省略了

}

第1种方法:表单提交,以字段数组接收

HTML代码如下:

ID:

Username:

Password:

ID:

Username:

Password:

Java代码如下:

@RequestMapping(value = “/submitUserList_1”, method ={RequestMethod.POST})

@ResponseBody

public String submitUserList_1(HttpServletResponse response,Integer[] id, String[] name, String[] pwd)

throws Exception{

String result = “”;

if(id == null || id.length <= 0){ return “No any ID.中文”; }

List userList = new ArrayList();

for (int i = 0; i < id.length; i++ ) {

User user = new User();

user.setId(id[i]);

user.setName(name[i]);

user.setPwd(pwd[i]);

userList.add(user);

}

result = this.showUserList(userList);

return result;

}

第2种方法:表单提交,以BeanListModel接收

HTML代码如下:

ID:

Username:

Password:

ID:

Username:

Password:

Java代码:

除了刚才公用的User类,还要封装一个User的容器类UserModel:

public class UserModel {

private List users;

public List getUsers() {

return users;

}

public void setUsers(List users) {

this.users = users;

}

public UserModel(List 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 userList = users.getUsers();

if(userList == null || userList.size() <= 0){ return “No any ID.中文”; }

result = this.showUserList(userList);

return result;

}

第3种方法:将Json对象序列化成Json字符串提交,以List接收

HTML代码:

submitUserList_3

function submitUserList_3() {alert(“ok”);

var customerArray = new Array();

customerArray.push({id: “1”, name: “李四”, pwd: “123”});

customerArray.push({id: “2”, name: “张三”, pwd: “332”});

$.ajax({

url: “/user/submitUserList_3”,

type: “POST”,

contentType : ‘application/json;charset=utf-8’, //设置请求头信息

dataType:“json”,

//data: JSON.stringify(customerArray),    //将Json对象序列化成Json字符串,JSON.stringify()原生态方法

data: $.toJSON(customerArray),            //将Json对象序列化成Json字符串,toJSON()需要引用jquery.json.min.js

success: function(data){

alert(data);

},

error: function(res){

alert(res.responseText);

}

});

}

submitUserList_3

<input id=“submit” type=“button” value=“Submit” οnclick=“submitUserList_3();”>

Java代码:

@RequestMapping(value = “/submitUserList_3”, method ={RequestMethod.POST})

@ResponseBody

public String submitUserList_3(@RequestBody List users)

throws Exception{

String result = “”;

if(users == null || users.size() <= 0){ return “No any ID.中文”; }

result = this.showUserList(users);

return result;

}

第4种方法:将表单对象序列化成Json字符串提交,以List接收

HTML代码:

submitUserList_4

//将表单序列化成json格式的数据(但不适用于含有控件的表单,例如复选框、多选的select)

(function($){

$.fn.serializeJson = function(){

var jsonData1 = {};

var serializeArray = this.serializeArray();

// 先转换成{“id”: [“12”,“14”], “name”: [“aaa”,“bbb”], “pwd”:[“pwd1”,“pwd2”]}这种形式

$(serializeArray).each(function () {

if (jsonData1[this.name]) {

if ($.isArray(jsonData1[this.name])) {

jsonData1[this.name].push(this.value);

} else {

jsonData1[this.name] = [jsonData1[this.name], this.value];

}

} else {

jsonData1[this.name] = this.value;

}

});

// 再转成[{“id”: “12”, “name”: “aaa”, “pwd”:“pwd1”},{“id”: “14”, “name”: “bb”, “pwd”:“pwd2”}]的形式

var vCount = 0;

// 计算json内部的数组最大长度

for(var item in jsonData1){

var tmp = $.isArray(jsonData1[item]) ? jsonData1[item].length : 1;

vCount = (tmp > vCount) ? tmp : vCount;

}

if(vCount > 1) {

var jsonData2 = new Array();

for(var i = 0; i < vCount; i++){

var jsonObj = {};

for(var item in jsonData1) {

jsonObj[item] = jsonData1[item][i];

}

jsonData2.push(jsonObj);

}

return JSON.stringify(jsonData2);

}else{

return “[” + JSON.stringify(jsonData1) + “]”;

}

};

})(jQuery);

function submitUserList_4() {alert(“ok”);

var jsonStr = $("#form1").serializeJson();

//console.log(“jsonStr:\r\n” + jsonStr);

//alert(jsonStr);

$.ajax({

url: “/user/submitUserList_4”,

type: “POST”,

contentType : ‘application/json;charset=utf-8’, //设置请求头信息

dataType:“json”,

data: jsonStr,

success: function(data){

alert(data);

},

error: function(res){

alert(res.responseText);

}

});

}

submitUserList_4

ID:

Username:

Password:

ID:

Username:

Password:

<input type=“button” value=“submit” οnclick=“submitUserList_4();”>

Java代码:

@RequestMapping(value = “/submitUserList_4”, method ={RequestMethod.POST})

@ResponseBody

public String submitUserList_4(@RequestBody List users)

throws Exception{

String result = “”;

if(users == null || users.size() <= 0){ return “No any ID.中文”; }

result = this.showUserList(users);

return result;

}

总结:

第1、2种方法其实都有一个共同的BUG:假如提交三条记录时,前面两条记录的某些字段不填值的话,在SpringMVC里接收不准确了。而且,每2种方法在HMTL中需要给name属性添加[下标],如果下标有跨度的话(比如第一组控件下标是0,第二组下标是2),那么SpringMVC里其实的是0到2三个对象的,默认下标是1的那个对象全为null值。

第3、4种方法最实用。

以上方法参考自以下URL:

http://www.cnblogs.com/wsw0515/p/3582627.html

http://www.oschina.net/question/917732_106601

http://jxd-zxf.iteye.com/blog/2072300

http://www.tashan10.com/jquery-jiang-biao-dan-xu-lie-hua-wei-jsondui-xiang/
————————————————
版权声明:本文为CSDN博主「zhyp29」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhyp29/article/details/84879308

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值