SpringMVC에서 여러 객체를 수신하는 4가지 방법

10403 단어 SpringMVC대상
문제 배경:
나는 한 표에서 여러 명의 승객의 개인 정보를 한꺼번에 SpringMVC, 앞부분 HTML과 SpringMVC Controller에 제출하려면 어떻게 해야 합니까?
첫 번째 방법: 폼 제출, 필드 그룹으로 수신;
두 번째 방법: 폼 제출, BeanListModel로 접수;
세 번째 방법: Json 대상을 Json 문자열로 정렬하여 제출하고 List로 수신한다.
네 번째 방법: 폼 대상을 Json 문자열로 정렬하여 제출하고List로 수신한다.
네 번째 방법은 사실 세 번째 방법의 업그레이드이다. 바로 표를 Json 대상으로 바꾸고 다시 Json 문자열로 바꾸어 제출하는 것이다.
그러나 네 번째 방법은 다중 선택 컨트롤 폼의 제출을 지원하지 않기 때문에 다섯 번째 강화판 방법이 있을 것이다.
위의 네 가지 방법은 모두 같은 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 , 
 }
첫 번째 방법: 폼 제출, 필드 그룹으로 수신
HTML 코드는 다음과 같습니다.

 <form action="/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;
 }
두 번째 방법: 양식 제출, BeanListModel로 접수
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;
 }
세 번째 방법: Json 객체를 Json 문자열로 정렬하여 List로 수신
HTML 코드:

<head>
 <title>submitUserList_3</title>
 <meta http-equiv="content-type" content="text/html; charset=utf-8">
 <script language="JavaScript" src="/js/jquery.min.js" ></script>
 <script language="JavaScript" src="/js/jquery.json.min.js" ></script>
 <script type="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>
 <input id="submit" type="button" value="Submit" onclick="submitUserList_3();">
</body>
Java 코드:

 @RequestMapping(value = "/submitUserList_3", method ={RequestMethod.POST})
 @ResponseBody
 public String 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;
 }
네 번째 방법: 양식 객체를 Json 문자열로 정렬하여 List로 수신
HTML 코드:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
 <title>submitUserList_4</title>
 <meta http-equiv="content-type" content="text/html; charset=utf-8">
 <script language="JavaScript" src="/js/jquery.min.js" ></script>
 <script type="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
" + 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> <form id="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" onclick="submitUserList_4();"> </form> </body> </html>
Java 코드:

@RequestMapping(value = "/submitUserList_4", method ={RequestMethod.POST})
@ResponseBody
public String 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;
 }
요약:
1, 2가지 방법은 모두 하나의 공통된 BUG가 있다. 만약에 세 개의 기록을 제출할 때 앞의 두 개의 기록의 일부 필드가 값을 채우지 않으면 SpringMVC에서 정확하게 받지 못한다.그리고 두 가지 방법마다 HMTL에서name 속성에 [아래 표시]를 추가해야 합니다. 만약에 아래 표시가 경계가 있다면(예를 들어 첫 번째 컨트롤은 0이고, 두 번째 그룹은 2), 스프링 MVC에는 사실 0에서 두세 개의 대상이 있고, 기본 아래 표시가 1인 그 대상은 모두null값입니다.
세 번째, 네 번째 방법이 가장 실용적이다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기