很少寫博客,如果寫的不好請多多包涵!
最近在用Spring mvc時遇到一個問題,在網上搜了很多資料。幾乎沒看到解決辦法!
例如:當我們在做批量添加或者更新時,在Controller層接收表單數據的問題!
我們做一個對用戶批量添加的實驗!
用戶Model:
1 public class User { 2 3 //用戶名 4 private String username; 5 //密碼 6 private String password; 7 8 public String getUsername() { 9 return username; 10 } 11 12 public void setUsername(String username) { 13 this.username = username == null ? null : username.trim(); 14 } 15 16 public String getPassword() { 17 return password; 18 } 19 20 public void setPassword(String password) { 21 this.password = password == null ? null : password.trim(); 22 } 23 24 public User(String username, String password) { 25 super(); 26 this.username = username; 27 this.password = password; 28 } 29 30 public User() { 31 super(); 32 } 33 34 }
控制層:
1 @Controller 2 @RequestMapping("/") 3 public class UserController { 4 /** 5 * Logger for this class 6 */ 7 private static final Logger logger = Logger.getLogger(UserController.class); 8 9 10 @RequestMapping("/user") 11 public void test(List<User> users){ 12 logger.debug(JSONArray.toJSON(users)); 13 } 14 }
我們在創建一個jsp:
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 3 <html> 4 <head> 5 <title>表單批量提交</title> 6 </head> 7 8 <body> 9 <form action="user" method="post"> 10 用戶名:<input type="text" name="username[0]"><br/> 11 密碼:<input type="text" name="password[0]"><br/> 12 用戶名:<input type="text" name="username[1]"><br/> 13 密碼:<input type="text" name="password[1]"><br/> 14 <input type="submit"> 15 </form> 16 </body> 17 </html>
現在我們來測試下
我們可以看到后台報錯了.具體為何大家可以去看源碼
可以用2種方式解決這個問題:
1.在表單提交之前,把表單序列化成JSON格式傳到后台,在來解析封裝成List<User>.
2.
我們創建一個UserModel
1 public class UserModel { 2 private List<User> users; 3 4 public List<User> getUsers() { 5 return users; 6 } 7 8 public void setUsers(List<User> users) { 9 this.users = users; 10 } 11 12 public UserModel(List<User> users) { 13 super(); 14 this.users = users; 15 } 16 17 public UserModel() { 18 super(); 19 } 20 21 }
修改我們的控制層和頁面
1 @RequestMapping("/user") 2 public void test(UserModel userModel ){ 3 logger.debug(JSONArray.toJSON(userModel)); 4 }
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 3 <html> 4 <head> 5 <title>表單批量提交</title> 6 </head> 7 8 <body> 9 <form action="user" method="post"> 10 用戶名:<input type="text" name="users[0].username"><br/> 11 密碼:<input type="text" name="users[0].password"><br/> 12 用戶名:<input type="text" name="users[1].username"><br/> 13 密碼:<input type="text" name="users[1].password"><br/> 14 <input type="submit"> 15 </form> 16 </body> 17 </html>
我們來看下控制台打印的結果:
這樣我們就解決啦!