例如:当我们在做批量添加或者更新时,在Controller层接收表单数据的问题!
我们做一个对用户批量添加的实验!
用户Model:
public class User { //用户名 private String username; //密码 private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username == null ? null : username.trim(); } public String getPassword() { return password; } public void setPassword(String password) { this.password = password == null ? null : password.trim(); } public User(String username, String password) { super(); this.username = username; this.password = password; } public User() { super(); } }
控制层:
@Controller @RequestMapping("/") public class UserController { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(UserController.class); @RequestMapping("/user") public void test(List users){ logger.debug(JSONArray.toJSON(users)); } }
我们在创建一个jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>表单批量提交title> <head> <body> <form action="user" method="post"> 用户名:<input type="text" name="username[0]"><br/> 密码:<input type="text" name="password[0]"><br/> 用户名:<input type="text" name="username[1]"><br/> 密码:<input type="text" name="password[1]"><br/> <input type="submit"> </form> <body> <html>
我们可以看到后台报错了.具体为何大家可以去看源码
可以用2种方式解决这个问题:
1.在表单提交之前,把表单序列化成JSON格式传到后台,在来解析封装成List<User>
我们创建一个UserModel
public class UserModel { private List users; public List getUsers() { return users; } public void setUsers(List users) { this.users = users; } public UserModel(List users) { super(); this.users = users; } public UserModel() { super(); } }
修改我们的控制层和页面
@RequestMapping("/user") public void test(UserModel userModel ){ logger.debug(JSONArray.toJSON(userModel)); }
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>表单批量提交title> <head> <body> <form action="user" method="post"> 用户名:<input type="text" name="users[0].username"><br/> 密码:<input type="text" name="users[0].password"><br/> 用户名:<input type="text" name="users[1].username"><br/> 密码:<input type="text" name="users[1].password"><br/> <input type="submit"> <form> <body> <html>
我们来看下控制台打印的结果:
这样我们就解决啦!