81商品项目(多条件查询和分页功能,更新)

分析:

点商品管理后就需要分页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"; }

 

posted @ 2021-12-31 13:04  最近饭吃的很多  阅读(136)  评论(0编辑  收藏  举报