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>

我们来看下控制台打印的结果:

这样我们就解决啦!

posted @ 2014-03-05 15:42  wsw0515  阅读(38468)  评论(3编辑  收藏  举报