spring mvc 接收页面表单List
很少写博客,如果写的不好请多多包涵!
最近在用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>
我们来看下控制台打印的结果:
这样我们就解决啦!