长大后想做什么?做回小孩!

0%

SpringMVC中的集合参数绑定

绑定数组参数和集合参数

1. 绑定数组参数

语言匮乏,组织不好语言。。。直接上例子。。

例子:页面中多个checkbox组件name都是ids。

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
28
29
30
31
32
33
34
<form action="${pageContext.request.contextPath }/queryItem.action" method="post">
查询条件:
<table width="100%" border=1>
<tr>
<td>商品id<input type="text" name="item.id" /></td>
<td>商品名称<input type="text" name="item.name" /></td>
<td><input type="submit" value="查询"/></td>
</tr>
</table>
商品列表:
<table width="100%" border=1>
<tr>
<td>选择</td>
<td>商品名称</td>
<td>商品价格</td>
<td>生产日期</td>
<td>商品描述</td>
<td>操作</td>
</tr>
<c:forEach items="${itemList }" var="item">
<tr>
<td><input type="checkbox" name="ids" value="${item.id}"/></td>
<td>${item.name }</td>
<td>${item.price }</td>
<td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
<td>${item.detail }</td>

<td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>

</tr>
</c:forEach>

</table>
</form>

controller方法可以用一个数组做形参,MVC的处理器适配器就会自动绑定参数。

对应以上的例子,controller方法的形参可以是Integer[ ] 类型,表单提交后被选中的checkbox的value就会被自动绑定到方法的形参中去。

2. 绑定集合参数

依然是上面的jsp文件,controller方法的形参直接改为List<Integer>,表单提交后会报错!

1
报错信息:Failed to instantiate [java.util.List]: Specified class is an interface

此时需要一个pojo对象:

1
2
3
4
5
6
7
8
public class ItemVo {



private List<Integer> ids;

getter/setter。。。
}

将controller方法的形参改为ItemVo类型,会自动将表单提交来的参数,按参数名绑定到pojo类的集合属性中。