日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

4种方法让SpringMVC接收多个对象(转:http://blog.csdn.net/lutinghuan/article/details/46820023)

發布時間:2024/9/27 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4种方法让SpringMVC接收多个对象(转:http://blog.csdn.net/lutinghuan/article/details/46820023) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題背景:
我要在一個表單里同時一次性提交多名乘客的個人信息到SpringMVC,前端HTMLSpringMVC Controller里該如何處理?

1種方法:表單提交,以字段數組接收;

2種方法:表單提交,以BeanListModel接收;

3種方法:將Json對象序列化成Json字符串提交,以List接收;

4種方法:將表單對象序列化成Json字符串提交,以List接收;
4種方法其實是第3種方法的升級,就是將表單轉成Json對象,再轉成Json字符串提交;
然而,第4種方法還不支持含有多選控件表單的提交,故應該還有第5種加強版的方法。

以上4種方法都共用同一個User實體類,代碼如下:

public class User {

?

??? privateInteger id;

??? privateString name;

??? privateString pwd;

?

???@Override

??? publicString toString() {

???????return "User{" +

??????????????? "id=" + id +

??????????????? ", name='" + name + '\''+

???????????????", pwd='" + pwd+ '\'' +

??????????????? '}';

??? }

??? //.......后面還有gettersetter方法,省略了

?}


1種方法:表單提交,以字段數組接收
HTML
代碼如下:

??? <formaction="/user/submitUserList_1" method="post">

???????ID:<input type="text" name="id"><br/>

???????Username:<input type="text" name="name"><br/>

???????Password:<input type="text" name="pwd"><br/><br/>

?

???????ID:<input type="text" name="id"><br/>

???????Username:<input type="text" name="name"><br/>

???????Password:<input type="text" name="pwd"><br/><br/>

???????<input type="submit" value="submit">

??? </form>

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<User> userList = new ArrayList<User>();

???????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
代碼如下:

??? <formaction="/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 {

??? privateList<User> users;

?

??? publicList<User> getUsers() {

???????return users;

??? }

?

??? publicvoid setUsers(List<User> users) {

???????this.users = users;

??? }

?

??? publicUserModel(List<User> users) {

???????super();

???????this.users = users;

??? }

?

??? publicUserModel() {

???????super();

??? }

?

}

SpringMVC Controller方法:

??? @RequestMapping(value= "/submitUserList_2", method ={RequestMethod.POST})

??? @ResponseBody

??? publicString 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;

??? }


3種方法:將Json對象序列化成Json字符串提交,以List接收
HTML
代碼:

<head>

??? <title>submitUserList_3</title>

??? <metahttp-equiv="content-type" content="text/html;charset=utf-8">

??? <scriptlanguage="JavaScript" src="/js/jquery.min.js" ></script>

??? <scriptlanguage="JavaScript" src="/js/jquery.json.min.js"></script>

??? <scripttype="text/javascript" language="JavaScript">

???????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);

??????????????? }

???????????});

???????}

??? </script>

</head>

?

<body>

??? <h1>submitUserList_3</h1>

??? <inputid="submit" type="button" value="Submit" οnclick="submitUserList_3();">

</body>

Java代碼:

??? @RequestMapping(value= "/submitUserList_3", method ={RequestMethod.POST})

??? @ResponseBody

??? publicString submitUserList_3(@RequestBody List<User> 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
代碼:

<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN"

???????"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

??? <title>submitUserList_4</title>

??? <metahttp-equiv="content-type" content="text/html;charset=utf-8">

??? <scriptlanguage="JavaScript" src="/js/jquery.min.js" ></script>

??? <scripttype="text/javascript" language="JavaScript">

???????//將表單序列化成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);

??????????????? }

???????????});

???????}

??? </script>

</head>

?

<body>

??? <h1>submitUserList_4</h1>

??? <formid="form1">

???????ID:<input type="text" name="id"><br/>

???????Username:<input type="text" name="name"><br/>

???????Password:<input type="text" name="pwd"><br/><br/>

?

???????ID:<input type="text" name="id"><br/>

???????Username:<input type="text" name="name"><br/>

???????Password:<input type="text" name="pwd"><br/><br/>

???????<input type="button" value="submit" οnclick="submitUserList_4();">

??? </form>

</body>

</html>

Java代碼:

??? @RequestMapping(value= "/submitUserList_4", method ={RequestMethod.POST})

??? @ResponseBody

??? publicString submitUserList_4(@RequestBody List<User> users)

???????????throws Exception{

???????String result = "";

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

???????result = this.showUserList(users);

???????return result;

??? }

總結:
12種方法其實都有一個共同的BUG:假如提交三條記錄時,前面兩條記錄的某些字段不填值的話,在SpringMVC里接收不準確了。而且,每2種方法在HMTL中需要給name屬性添加[下標],如果下標有跨度的話(比如第一組控件下標是0,第二組下標是2),那么SpringMVC里其實的是02三個對象的,默認下標是1的那個對象全為null值。
34種方法最實用。

以上方法參考自以下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/

?

總結

以上是生活随笔為你收集整理的4种方法让SpringMVC接收多个对象(转:http://blog.csdn.net/lutinghuan/article/details/46820023)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。