分析:
点商品管理后就需要分页action管理了
这时候是空的查询条件。
意思是所有时候的展示都是多条件查询时候的,只不过有时候查询条件为空。
业务逻辑层需要更改
数据访问层不需要更改
1.ProductInfoVo(封装条件的类)改造
在vo类中增加页码属性,并赋初值为1
2.业务逻辑层改造
多条件查询变成多条件查询分页
@Override public PageInfo<ProductInfo> splitPageVo(ProductInfoVo vo, int pageSize) { //取出集合之前,先要设置PageHelper.startPage()属性 PageHelper.startPage(vo.getPage(),pageSize); List<ProductInfo> list = productInfoMapper.selectCondition(vo); return new PageInfo<>(list); }
3.控制器改造
//ajax分页翻页处理 @ResponseBody//可以解析ajxa请求,可以绕过视图解析器,将当前返回值转为json格式返回到客户端,当前没有返回值 @RequestMapping("/ajaxSplit") public void ajaxSplit(ProductInfoVo vo, HttpSession session) { //取得当前page参数的页面的数据 PageInfo info = productInfoService.splitPageVo(vo,PAGE_SIZE); session.setAttribute("info", info); }
4.页面改造
分页
function ajaxsplit(page) { //取出查询条件 var pname = $("#pname").val(); var typeid = $("#typeid").val(); var lprice = $("#lprice").val(); var hprice = $("#hprice").val(); //向服务发出ajax请求,请示page页中的所有数据,在当前页面上局部刷新显示 $.ajax({ url: "${pageContext.request.contextPath}/prod/ajaxSplit.action", data: {"page": page}, type: "post", success: function () { //重新加载显示分页数据的容器 这个页面的table容器重新加载一遍 $("#table").load("http://localhost:8080/admin/product.jsp #table"); } }); }
翻页
function ajaxsplit(page) { //取出查询条件 var pname = $("#pname").val(); var typeid = $("#typeid").val(); var lprice = $("#lprice").val(); var hprice = $("#hprice").val(); //向服务发出ajax请求,请示page页中的所有数据,在当前页面上局部刷新显示 $.ajax({ url: "${pageContext.request.contextPath}/prod/ajaxSplit.action", data: {"page": page,"pname":pname,"typeid":typeid,"lprice":lprice,"hprice":hprice}, type: "post", success: function () { //重新加载显示分页数据的容器 这个页面的table容器重新加载一遍 $("#table").load("http://localhost:8080/admin/product.jsp #table"); } });
5.多条件查询 停留 更新 页面分析
多条件查询后,更新信息后
需要停留在更新信息的那一页,并保留查询信息
<td> <button type="button" class="btn btn-info " onclick="one(${p.pId},${info.pageNum})">编辑 </button> <button type="button" class="btn btn-warning" id="mydel" onclick="del(${p.pId},${info.pageNum})">删除 </button> </td>
function one(pid,page) { //取出查询条件 var pname = $("#pname").val(); var typeid = $("#typeid").val(); var lprice = $("#lprice").val(); var hprice = $("#hprice").val(); //向服务器提交请求,传递商品id var str = "?pid="+pid+"&page="+page+"&pname="+pname+"&typeid="+typeid+"&lprice="+lprice+"&hprice="+hprice; location.href = "${pageContext.request.contextPath}/prod/one.action" + str; }
6.更新多条件action
跳转到更新页面上时,将当前所有条件携带到action那里,并且还要回显到当前页面
所以要把跟分页有关跟条件有关的对象存储在session中
update更新时就在session中取这个对象
//查出当前商品信息 @RequestMapping("/one") public String one(int pid,ProductInfoVo vo, Model model,HttpSession session) { ProductInfo info = productInfoService.getByID(pid); model.addAttribute("prod", info); //将多条件及页码放入session中,更新处理结束后分页时读取条件和页码进行处理 session.setAttribute("prodVo",vo); return "update"; } //将查到的信息回显到更新页面 @RequestMapping("/update") public String update(ProductInfo info, HttpServletRequest request) { //因为ajax的异步图片上传,如果有上传过, // 则saveFileName里有上传上来的图片的名称, // 如果没有使用异步ajax上传过图片,则saveFileNme="", // 实体类info使用隐藏表单域提供上来的pImage原始图片的名称; if (!saveFileName.equals("")) { info.setpImage(saveFileName); } //完成更新处理 int num = -1; try { num = productInfoService.update(info); } catch (Exception e) { e.printStackTrace(); } if (num > 0) { //此时说明更新成功 request.setAttribute("msg", "更新成功!"); } else { //更新失败 request.setAttribute("msg", "更新失败!"); } //处理完更新后,saveFileName里有可能有数据, // 而下一次更新时要使用这个变量做为判断的依据,就会出错,所以必须清空saveFileName. saveFileName = ""; return "forward:/prod/split.action"; }
//显示第1页的5条记录 @RequestMapping("/split") public String split(HttpServletRequest request) { PageInfo info = null; Object vo = request.getSession().getAttribute("prodVo"); if(vo != null ){ info = productInfoService.splitPageVo((ProductInfoVo)vo,PAGE_SIZE); request.getSession().removeAttribute("prodVo");
//到这里就要清掉session对象 }else { //得到第1页的内容,里面有当前页码(pageNum),总页数(pageSize),要显示对象的数组(list)等 info = productInfoService.splitPage(1, PAGE_SIZE); } //从业务逻辑层拿到的数据封装到request对象中 request.setAttribute("info", info); return "product"; }