问题背景: 我要在一个表单里同时一次性提交多名乘客的个人信息到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.中文'; } List 第2种方法:表单提交,以BeanListModel接收 HTML代码如下: Java代码: 除了刚才公用的User类,还要封装一个User的容器类UserModel: public class UserModel { private List SpringMVC Controller方法: @RequestMapping(value = '/submitUserList_2', method ={RequestMethod.POST}) @ResponseBody public String submitUserList_2(UserModel users) throws Exception{ String result = ''; List 第3种方法:将Json对象序列化成Json字符串提交,以List接收 HTML代码:
Java代码: @RequestMapping(value = '/submitUserList_4', method ={RequestMethod.POST}) @ResponseBody public String submitUserList_4(@RequestBody List 总结: 第1、2种方法其实都有一个共同的BUG:假如提交三条记录时,前面两条记录的某些字段不填值的话,在SpringMVC里接收不准确了。而且,每2种方法在HMTL中需要给name属性添加[下标],如果下标有跨度的话(比如第一组控件下标是0,第二组下标是2),那么SpringMVC里其实的是0到2三个对象的,默认下标是1的那个对象全为null值。 |
|