包装类型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的拓展属性。
调试:
输入电视机点击查询,
测试结果如图
说明查询成功!
转载请注明出处:http://blog.csdn.net/acmman/article/details/47417797
时间: 2024-09-30 21:30:26