分享

让 SpringMVC 接收多个对象的4种方法 – 码农网

 spzproot 2016-03-10

问题背景:

我要在一个表单里同时一次性提交多名乘客的个人信息到SpringMVC,前端HTML和SpringMVC Controller里该如何处理?

  • 第1种方法:表单提交,以字段数组接收;
  • 第2种方法:表单提交,以BeanListModel接收;
  • 第3种方法:将Json对象序列化成Json字符串提交,以List接收;
  • 第4种方法:将表单对象序列化成Json字符串提交,以List接收;
    第4种方法其实是第3种方法的升级,就是将表单转成Json对象,再转成Json字符串提交;
    然而,第4种方法还不支持含有多选控件表单的提交,故应该还有第5种加强版的方法。

以上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代码如下:

    
ID:
Username:
Password:

ID:
Username:
Password:

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 userList = 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代码如下:

    
ID:
Username:
Password:

ID:
Username:
Password:

Java代码:

除了刚才公用的User类,还要封装一个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();    }}

SpringMVC Controller方法:

    @RequestMapping(value = '/submitUserList_2', method ={RequestMethod.POST})    @ResponseBody    public String submitUserList_2(UserModel users)            throws Exception{        String result = '';        List userList = 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

ID:
Username:
Password:

ID:
Username:
Password:

Java代码:

    @RequestMapping(value = '/submitUserList_4', method ={RequestMethod.POST})    @ResponseBody    public String submitUserList_4(@RequestBody List users)            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种方法最实用。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多