美文网首页
用SpringMVC从页面获取多个name值相同的input值

用SpringMVC从页面获取多个name值相同的input值

作者: 波尔多夜 | 来源:发表于2019-06-28 10:39 被阅读0次

    前几天遇到了这个问题,我以为在controller的参数列表中用 list 接收就可以实现,但是报了这个错误:

    Failed to instantiate [java.util.List]: Specified class is an interface

    因为SpringMVC在封装参数的时候,要实例化你提供的参数类型,List是接口,不能直接实例化,会报"BeanInstantiationException"  bean实例化异常。

    需要从controller获取页面提交的多个User对象,下面是User类,有id和name两个属性

    有些get、set没截全

    要解决这个问题有两种方案:

    1、自己封装。在后台用数组类型接收。例如在参数中用 int[ ] id , String[ ] name  去接收,你会得到数组形式的参数,然后自己封装成User。或者直接用 int id ,String name 接收,你得到的是用逗号拼接的参数。这种方式都不能该直接得到User对象,特别麻烦。(注意:不能用 User[ ] userArray 接收,否则会报NoSuchMethodException)

    2、使用中间参数封装。写一个UserModel类:

    controller中的参数这样写:(注意在遍历时,一定要对user判空,原因后面会讲到。)

    页面这样写:

    注意 name 值里的下标,下标前面的 users 和 UserModel 的属性 必须一样,这样做,SpringMVC就可以用你提供的UserModel对象找到它的属性users,再通过这个属性,封装User,最后,你只需要用UserModel的get() 方法就可以得到User集合。(SpringMVC封装时,会按下标顺序封装,如果你的下标是0,2,3,5   框架会把1和4补上,补上的是null,所以在遍历这个list的时候一定要判空!!!)

    注意:网上有很多人是复制了别人说的,最后页面部分没有说清楚或者没有复制,大家以为直接写User的属性名就可以,导致获取到的UserModel一直为null,原因就是少了页面部分。

    相关文章

      网友评论

          本文标题:用SpringMVC从页面获取多个name值相同的input值

          本文链接:https://www.haomeiwen.com/subject/qqwjcctx.html