1. 程式人生 > 其它 >81商品專案(多條件查詢和分頁功能,更新)

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");
        }else {
            //得到第1頁的內容,裡面有當前頁碼(pageNum),總頁數(pageSize),要顯示物件的陣列(list)等
            info = productInfoService.splitPage(1, PAGE_SIZE);
        }
        //從業務邏輯層拿到的資料封裝到request物件中
        request.setAttribute("info", info);
        return "product";
    }