問題背景:
我要在一個表單里同時一次性提交多名乘客的個人信息到SpringMVC,前端HTML和SpringMVC Controller里該如何處理?
以上4種方法都共用同一個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方法,省略了 }
第1種方法:表單提交,以字段數組接收
HTML代碼如下:
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.中文'; } ListuserList = new ArrayList (); 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; }
第2種方法:表單提交,以BeanListModel接收
HTML代碼如下:
Java代碼:
除了剛才公用的User類,還要封裝一個User的容器類UserModel:
public class UserModel { private Listusers; public List getUsers() { return users; } public void setUsers(List users) { this.users = users; } public UserModel(List 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 = ''; ListuserList = users.getUsers(); if(userList == null || userList.size() <= 0){ return 'No any ID.中文'; } result = this.showUserList(userList); return result; }
第3種方法:將Json對象序列化成Json字符串提交,以List接收
HTML代碼:
submitUserList_4
Java代碼:
@RequestMapping(value = '/submitUserList_4', method ={RequestMethod.POST}) @ResponseBody public String submitUserList_4(@RequestBody Listusers) throws Exception{ String result = ''; if(users == null || users.size() <= 0){ return 'No any ID.中文'; } result = this.showUserList(users); return result; }
總結:
第1、2種方法其實都有一個共同的BUG:假如提交三條記錄時,前面兩條記錄的某些字段不填值的話,在SpringMVC里接收不準確了。而且,每2種方法在HMTL中需要給name屬性添加[下標],如果下標有跨度的話(比如第一組控件下標是0,第二組下標是2),那么SpringMVC里其實的是0到2三個對象的,默認下標是1的那個對象全為null值。
第3、4種方法最實用。