包装类型pojo参数绑定

1.需求
商品查询controller方法中实现商品查询条件传入。

2.实现方法
第一种方法:在形参中 添加HttpServletRequest request参数,通过request接收查询条件参数。
第二种方法:在形参中让包装类型的pojo接收查询条件参数。
分析:
页面传参数的特点:复杂,多样性。条件包括:用户账号、商品编号、订单信息......
如果将用户账号、商品编号、订单信息等放在简单pojo(属性是简单类型)中,pojo类属性比较多,比较乱。
建议使用包装类型的pojo,pojo中属性是pojo。

3.页面参数和controller方法形参定义

页面参数:

<%@ 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>
</head>
<body>
<form action="${pageContext.request.contextPath }/items/queryItem.action" method="post">
查询条件:
<table width="100%" border=1>
<tr>
<td>商品名称:<input name="itemsCustom.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>
</tr>
<c:forEach items="${itemsList }" var="item">
<tr>
<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 }/items/editItems.action?id=${item.id}">修改</a></td>


</tr>
</c:forEach>


</table>
</form>
</body>


</html>


可以看到,我们的查询条件使用的是属性.的方式(如果再包pojo,就再点....)


商品名称:<input name="itemsCustom.name" />


注意:itemsCustom和包装pojo中的属性一致即可。



controller方法形参和代码:


//商品查询列表
//@RequestMapping实现 对queryItems方法和url进行映射,一个方法对应一个url
//一般建议将url和方法写成一样
@RequestMapping("/queryItems")
public ModelAndView queryItems(HttpServletRequest request,ItemsQueryVo itemsQueryVo)throws Exception{

//测试forword后request是否可以共享
System.out.println("id="+request.getParameter("id"));

//调用Service查找数据库,查询商品列表,这里使用静态数据模拟
List<ItemsCustom> itemsList=itemsService.findItemsList(itemsQueryVo);

//返回ModelAndView
ModelAndView modelAndView=new ModelAndView();
//相当于request的setAttribut,在jsp页面中通过这个来取数据
modelAndView.addObject("itemsList",itemsList);

//指定视图
//下边的路径,如果在视图解析器中配置jsp的路径前缀和后缀,修改为items/itemsList
//modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp")
//下边的路径配置就可以不在程序中指定jsp路径的前缀和后缀
modelAndView.setViewName("items/itemsList");


return modelAndView;
}


ItemsQueryVo.java:


package cn.edu.hpu.ssm.po;

//商品查询包装对象
public class ItemsQueryVo {


//商品信息包装
private Items items;

//为了系统可拓展性,对原始生成的PO进行拓展
private ItemsCustom itemsCustom;
//set和get方法忽略
}


其中items:


package cn.edu.hpu.ssm.po;

import java.util.Date;


public class Items {
private Integer id;


private String name;


private Float price;


private String pic;


private Date createtime;


private String detail;
//set和get方法忽略
}


itemCustom继承了Items,是Items的子类,里面增加了Items的拓展属性。



调试:


输入电视机点击查询,

【SpringMVC整合MyBatis】案例驱动-包装类型pojo参数绑定_java

测试结果如图

【SpringMVC整合MyBatis】案例驱动-包装类型pojo参数绑定_java_02

说明查询成功!