spring mvc 如何传递集合参数(list,数组)

spring mvc 可以自动的帮你封装参数成为对象,不用自己手动的通过request一个一个的获取参数,但是这样自动的参数封装碰碰到了集合参数可能就需要点小技巧才可以了。

一、基础类型和引用类型有什么区别?

  基础类型是直接保存在堆栈上面的,引用类型(对象)值保存在堆上面,地址保存在栈上面的,基础类型都有非null的默认值,比如int默认是0,boolean默认是false,引用类型除非是用new开辟出新的空间,否则只有地址信息没有值信息。int 和 integer的区别不仅是有没有默认值的问题,Integer还有自己的成员变量,虽然都是静态的,比如Integer.MAX_VALUE就是其中一个,而Integer的值都是保存在一个地址不变的成员变量value。

二、基础类型、赋值的时候不需要特别指名成员变量(String,基础类型的封装类)的引用类型集合参数

  说了那么多基础类型和引用类型区别,最主要的一点就是基础类型是没有成员变量的,基础类型可以直接是a=x,而引用类型的值大多需要a.b=x才可以得到,那么获取基础类型的集合参数是最容易的,比如你有个方法是需要获取一个int的数组或者list列表,直接在页面上通过同名的input框就可以办到了

<input type="text" value="" name="titleName" id="add_titleName"/>
<input type="text" value="" name="titleName" id="add_titleName"/>
<input type="text" value="" name="titleName" id="add_titleName"/>

后台获取

 public void getParmas(List<String> titleName)

或者

 public void getParmas(String[] titleName)

都可以获取到titleName的值。

这里String不是8大基础类型,但是String和基础类型有个共同的特点,就是赋值的时候不需要特别指名成员变量,包括基础类型的封装类一样。

三、赋值的时候不需要特别指名成员变量引用类型的集合参数

  这些类基本上都是我们自己组建的业务逻辑类,很多情况下还包含了相互组合的关系,先说第一种情况,单纯的接收一个List<?> xxx;

  

@RequestMapping("/add")
    public void add(Model model,List<SysRole> sysRole){
     。。。。
    }

这样的方式是不行的,会报Could not instantiate bean class [java.util.List]: Specified class is an interface这个异常。

Servlet.service() for servlet [springServlet] in context with path [/bid] threw exception [Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.List]: Specified class is an interface] with root cause
org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.List]: Specified class is an interface 

怎么解决了?

需要我们用到第二种情况。

接收一个带有list成员变量的的对象,比如你有个类是User,一个User可以有多个联系电话,

class User{
   List<Contact> contactList;
}

我们要获取一个带有多个联系人的user参数

public void addUser(User user){
.....
}

在页面上直接可以通过

<input type="text" value="" name="user.contactList[0].phone" id="add_contact_phone_1"/>

这样的方式进行获取参数。

那我们碰到第一种情况怎么办呢?把它变成第二种方式进行处理,也就是说新建一个包装类专门来包装类似的需要接收的list参数。

为什么第一种方式不行了?

因为spring mvc 中获取参数的方式不管有多少种,他的本质依然是

request.getParameter("name")

那把这个参数封装到一个对象中,也只能是同setter方法,那问题的关键是如何找到这个setter
方法?肯定是setName中的name和request中的name对应。这才能找到。你想,如果你单纯接收一个list参数,list虽然有get和set方法,但是没有名字呀,只能根据数组下标来判断参数位置。所以只能通过第二种方法进行参数传递

时间: 2025-01-07 01:05:01

spring mvc 如何传递集合参数(list,数组)的相关文章

Spring MVC 前后台传递json格式数据 Content type &#39;application/x-www-form-urlencoded;charset=UTF-8&#39; not supported

报错如下: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported 解决方案: 引入如下包: 问题既解决. Spring MVC 前后台传递json格式数据 Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

spring mvc 编写处理带参数的Controller

在上一随笔记录的基础上,现记录编写处理带有参数的Controller. @Controller //这个注解会告知<context:component:scan> 将HomeController自动检测为一个Bean@RequestMapping("/home")  //这是根Urlpublic class HomeController {        private UserService userService;        @Autowired    public

spring mvc 与fastjson集合

在使用spring mvc框架时候,有时候请求需要返回json格式.spring默认使用jackjson,但是我需要用fastjson,每次手动转换比较麻烦,需要spring自动为我转换,配置代码如下 Spring版本4.0.0 默认使用jackjson的配置 <annotation-driven> </annotation-driven>  使用fastjson的配置     <annotation-driven>       <message-converte

spring mvc 如何从前台表单传递集合参数并绑定集合对象

前端传递集合: <tr>    <td>    <select name="indtablelist[0].commodity_id">        <c:forEach items="${commoditys}" var="comm">        <option value="${comm.id}">${comm.commodity_no}||${comm.c

Spring MVC 接受的请求参数

[TOC] 1. 概述 Spring MVC 允许以多种方式将客户端的数据传送到控制器的处理方法中: 查询参数(Query Parameter) 表单参数(Form Parameter) 路径变量(Path Variable) 2. 详解 2.1 处理查询参数 查询参数都是String类型的,但当绑定到方法参数时会转换为相应的类型 在方法中使用 @RequestParam注解,同时可通过defaultValue属性设置当参数不存在时的默认值,如 public List<Spittle> spi

五、Spring MVC实用POJO进行参数传值

前面已经说了,spring mvc可以通过@PathVariable可以把url中的值映射到目标方法的参数上,也可以使用@RequestParam进行单个参数的传递,如果一次需要传递多个参数的话,就需要写多个相应的注解,那有没有什么更简单方便的方法呢?答案是有的,spring mvc有自动装箱的功能,可以通过参数的name属性,给后台绑定的对象的对应的属性完成赋值操作,而且还支持级联操作,即支持嵌套. 1.使用POJO(Plain Old Java Object)进行参数传值 下面来看一下具体例

Spring MVC —— 前后台传递JSON

1. 传递JSON参数 vardata = {'id':1,'name':'abc'}; $.ajax({ type:'post', url:'homePageAction.do?testAJax', contentType:'application/x-www-form-urlencoded', data:JSON.stringify(data), success:function(data){ console.log(data.msg); }, error:function(){ } });

spring mvc接收List集合、JUI传JSP List

JUI页面是这样的 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <div class="tabsContent" style="height: 150px;">     <div>         <table class="list nowrap itemDetail" addButton="新建诊疗服务录

spring MVC接收list,map,数组

spring mvc 接收复杂类型1.接收数组    1.jsp页面:        <form action="home/hello" method="post">           3:<input type="checkbox" name="ll" value="adfadf" id="myfile"><br/>