绑定数组参数和集合参数
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类的集合属性中。