一、分頁案例分析
功能分析:使用分頁外掛,實現分頁,效果如下圖:
二、實現思路和程式碼
2.1)頁面實現分析
1.引入分頁外掛的樣式檔案和 js 檔案。
2. 定義當前頁碼和每頁顯示的條數。(分頁必備資訊)
3. 呼叫查詢資料的函式。
4. 定義請求查詢分頁資料的函式,發起 AJAX 非同步請求。
5. 為分頁按鈕區域設定頁數引數(總頁數和當前頁)。(設定分頁外掛引數,展示分頁條)
6. 為分頁按鈕繫結單擊事件,完成上一頁下一頁查詢功能。(設定分頁外掛,繫結事件)
頁面程式碼實現:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>網站首頁</title> <link rel="stylesheet" href="css/tt.css"> <link rel="stylesheet" href="css/simplePagination.css"> </head> <body> <div class="top"> <span class="top-left">下載APP</span> <span class="top-left"> 北京 晴天</span> <span class="top-right">更多產品</span> </div> <div class="container"> <div class="left"> <a> <!--<img src="img/logo.png"><br/>--> </a> <ul> <li> <a class="channel-item active" href="#"> <span> 推薦 </span> </a> </li> <li><a class="channel-item" href="#"> <span> 影片 </span> </a></li> <li><a class="channel-item" href="#"> <span> 熱點 </span> </a></li> <li><a class="channel-item" href="#"> <span> 直播 </span> </a></li> <li><a class="channel-item" href="#"> <span> 圖片 </span> </a></li> <li><a class="channel-item" href="#"> <span> 娛樂 </span> </a></li> <li><a class="channel-item" href="#"> <span> 遊戲 </span> </a></li> <li><a class="channel-item" href="#"> <span> 體育 </span> </a></li> </ul> </div> <div class="center"> <ul class="news_list"> </ul> <div class="content"> <div class="pagination-holder clearfix"> <div id="light-pagination" class="pagination"></div> </div> </div> </div> </div> </body> <script src="js/jquery-3.3.1.min.js"></script> <script src="js/jquery.simplePagination.js"></script> <script> //1.定義當前頁碼和每頁顯示的條數 (分頁必備資訊) let start = 1; let pageSize = 10; //2.呼叫查詢資料的方法 queryByPage(start,pageSize); //3.定義請求查詢分頁資料的函式,發起AJAX非同步請求,將資料顯示到頁面 function queryByPage(start,pageSize) { $.ajax({ //請求的資源路徑 url:"newsServlet2", //請求的引數 data:{"start":start,"pageSize":pageSize}, //請求的方式 type:"POST", //響應資料形式 dataType:"json", //請求成功後的回撥函式 success:function (pageInfo) { //將資料顯示到頁面 let titles = ""; for(let i = 0; i < pageInfo.list.length; i++) { titles += "<li>\n" + " <div class=\"title-box\">\n" + " <a href=\"#\" class=\"link\">\n" + pageInfo.list[i].title + " <hr>\n" + " </a>\n" + " </div>\n" + " </li>"; } $(".news_list").html(titles); //4.為分頁按鈕區域設定頁數引數(總頁數和當前頁) $("#light-pagination").pagination({ pages:pageInfo.pages, currentPage:pageInfo.pageNum }); //5.為分頁按鈕繫結單擊事件,完成上一頁下一頁查詢功能(設定分頁外掛引數,展示分頁條) $("#light-pagination .page-link").click(function () { //獲取點選按鈕的文字內容 let page = $(this).html(); //如果點選的是Prev,呼叫查詢方法,查詢當前頁的上一頁資料 if(page == "Prev") { queryByPage(pageInfo.pageNum - 1,pageSize); }else if (page == "Next") { //如果點選的是Next,呼叫查詢方法,查詢當前頁的下一頁資料(設定分頁外掛,繫結事件) queryByPage(pageInfo.pageNum + 1,pageSize); } else { //呼叫查詢方法,查詢當前頁的資料 queryByPage(page,pageSize); } }); } }); } </script> </html>
2.2) 伺服器實現分析
1. 獲取請求引數。(當前頁碼和每頁條數)
2. 根據當前頁碼和每頁顯示的條數,呼叫業務層的方法,得到分頁 Page 物件
3. 封裝 PageInfo 物件。
4. 將得到的資料轉為 json。
5. 將資料響應給客戶端。
伺服器程式碼實現:
public class NewsServlet2 extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //設定請求和響應的編碼 req.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;charset=UTF-8"); //1.獲取請求引數(當前頁碼和每頁條數) String start = req.getParameter("start"); String pageSize = req.getParameter("pageSize"); //2.根據當前頁碼和每頁顯示的條數來呼叫業務層的查詢方法,得到分頁Page物件 NewsService service = new NewsServiceImpl(); Page page = service.pageQuery(Integer.parseInt(start), Integer.parseInt(pageSize)); //3.封裝PageInfo物件 PageInfo<List<News>> info = new PageInfo<>(page); //4.將得到的資料轉為JSON String json = new ObjectMapper().writeValueAsString(info); //5.將資料響應給客戶端 resp.getWriter().write(json); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req,resp); } }
成功實現。