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());
}

.持续补充中.....

posted @ 2019-09-13 17:38  杰醍奋  阅读(727)  评论(0编辑  收藏  举报