• 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"; }
  • 相关阅读:
    JavaScript 开发进阶:理解 JavaScript 作用域和作用域链
    jquery插件 源码
    webkit浏览器渲染影响因素分析
    JS操作JSON总结
    转:ie6与firefox操作iframe中DOM节点的一点不同
    input:focus
    JS设计模式一:单例模式
    JavaScript 变量、函数与原型链
    让你提前认识软件开发(49):自己主动測试
    Docker 开源管理工具集锦
  • 原文地址:https://www.cnblogs.com/zhaojiayu/p/15752660.html
Copyright © 2020-2023  润新知