06_springmvc之参数绑定(pojo和集合)
一.包装类型pojo参数绑定
实现方法:
第一种方法:在形参中 添加HttpServletRequest request参数,通过request接收查询条件参数。
第二种方法:在形参中让包装类型的pojo接收查询条件参数。
分析:
页面传参数的特点:复杂,多样性。条件包括 :用户账号、商品编号、订单信息。。。
如果将用户账号、商品编号、订单信息等放在简单pojo(属性是简单类型)中,pojo类属性比较多,比较乱。
建议使用包装类型的pojo,pojo中属性是pojo。
例如:
简单的pojo:
扩展的pojo:
包装类型的pojo:
页面参数:
商品名称:<input name="itemsCustom.name" />注意:itemsCustom和包装pojo中的属性一致即可。
二.集合类型绑定
1.数组的绑定
实现商品的批量删除:
页面:
设置复选框的name值。
controller方法:
形参中数组的名字和name属性值保持一致。
2.list的绑定
实际应用:批量修改学生成绩等。。。批量提交等。这里演示批量修改商品信息。
controller方法定义:
1、进入批量商品修改页面(页面样式参考商品列表实现)
2、批量修改商品提交
使用List接收页面提交的批量数据,通过包装pojo接收,在包装pojo中定义list<pojo>属性
controller:
这里展示批量修改页面的页面,讲查询出来的集合包装在list中。
//批量修改商品页面,将商品信息查询出来
@RequestMapping("/editItemsQuery")
public ModelAndView editItemsQuery(HttpServletRequest request, ItemsQueryVo itemsQueryVo) throws Exception{
//调用service查找数据库,查询商品列表,这里使用静态模拟
List<ItemsCustom> itemsList = itemsService.findItemsList(itemsQueryVo);
//返回ModelAndView
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("itemsList",itemsList);//相当于request.setAtttributes
modelAndView.setViewName("items/editItemsQuery");//指定返回的视图
return modelAndView;
}
页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查询商品列表</title>
<script type="text/javascript">
function editItemsAllSubmit() {
//提交form
document.itemsForm.action="${pageContext.request.contextPath}/items/editItemsAllSubmit.action"
document.itemsForm.submit();
}
function queryItems() {
//提交form
document.itemsForm.action="${pageContext.request.contextPath}/items/queryItems.action"
document.itemsForm.submit();
}
</script>
</head>
<body>
<form name="itemsForm" action="${pageContext.request.contextPath}/items/queryItems.action" method="post">
查询条件:
<table width="100%" border=1>
<tr>
<td>商品名称:<input name="itemsCustom.name"/></td>
<td><input type="button" value="查询" οnclick="queryItems()"/></td>
<td><input type="button" value="批量修改提交" οnclick="editItemsAllSubmit()"/></td>
</tr>
</table>
商品列表:
<table width="100%" border=1>
<tr>
<td>商品名称</td>
<td>商品价格</td>
<td>生产日期</td>
<td>商品描述</td>
<td>操作</td>
</tr>
<c:forEach items="${itemsList }" var="item" varStatus="status">
<input type="hidden" value="${item.id}" name="itemsList[${status.index}].id"/>
<tr>
<td><input name="itemsList[${status.index}].name" value="${item.name}"/></td>
<td><input name="itemsList[${status.index}].price" value="${item.price}"/></td>
<td><input name="itemsList[${status.index}].createtime" value="<fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/> </td>
<td><input name="itemsList[${status.index}].detail" value="${item.detail}"/></td>
<td><a href="${pageContext.request.contextPath }/items/editItems.action?id=${item.id}">修改</a></td>
</tr>
</c:forEach>
</table>
</form>
</body>
</html>
批量修改的方法:
2.map的绑定
也通过在包装pojo中定义map类型属性。在包装类中定义Map对象,并添加get/set方法,action使用包装对象接收。
包装类中定义Map对象如下。
包装的pojo:
Public class QueryVo {
private Map<String, Object> itemInfo = new HashMap<String, Object>();
//get/set方法..
}
页面定义如下:
<tr>
<td>学生信息:</td>
<td>
姓名:<inputtype="text"name="itemInfo['name']"/>
年龄:<inputtype="text"name="itemInfo['price']"/>
.. .. ..
</td>
</tr>
Contrller方法定义如下:
public String useraddsubmit(Model model,QueryVo queryVo)throws Exception{
System.out.println(queryVo.getStudentinfo());
}
.持续补充中.....