81商品專案(多條件查詢和分頁功能,更新)
阿新 • • 發佈:2021-12-31
分析:
點商品管理後就需要分頁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"; }