分頁可簡單,可復雜,網(wǎng)上有好多,但是感覺都不太適合自己,所以,這里自己單獨整理一個
package tool; import javax.servlet.http.HttpServletRequest; /** * 返回分頁字符串類 * * @author zhuangzi * @version 2020/03/08 * */ public class Pager { /** * 生成簡單的分頁字符串 * * @param total 總記錄數(shù) * @param size 每頁記錄數(shù) * @param step 最多顯示分頁頁數(shù) * @param page 當前頁數(shù) * @param request 請求request * @return 分頁的HTML代碼 */ public static String getPages(int total, int size, int step, int page, HttpServletRequest request, String paramName) { // 根據(jù)request獲取當前url,包括參數(shù),如果有已存在名稱未paramname的參數(shù),剔除掉,后面會追加新的參數(shù) String url = request.getContextPath() + request.getServletPath(); String query = request.getQueryString(); if (query != null) { String params = ""; String[] querys = query.split("&"); for (int i = 0 ; i < querys.length ; i ++) { if (querys[i].startsWith(paramName)) continue; if (params.equals("")) params += querys[i]; else params += "&" + querys[i]; } if (!params.equals("")) url += "?" + params; } // 結果html String pages = ""; String urls = ""; if (url.contains("?")) { urls = url + "&" + paramName; } else { urls = url + "?" + paramName; } int pageCount = (int) Math.ceil((double) total / size);// 求總頁數(shù) if (pageCount == 1) { return pages; } if (page > pageCount) { page = pageCount;// 如果分頁變量大總頁數(shù),則將分頁變量設計為總頁數(shù) } if (page <= 0) { page = 1;// 如果分頁變量小于1,則將分頁變量設為1 } if(pageCount <= step){ // 總頁數(shù) 小于 每頁顯示的數(shù)量時, 全部顯示 if(pageCount > 1){ for (int i = 1; i <= pageCount; i++) { if (i != page) { pages = pages.concat("<a href='" + urls + "=" + i + "'>" + i + "</a>\n"); } else { pages = pages.concat("<span class='current'>" + i + "</span>\n"); } } } } else{ // 顯示上一頁 if (page > 1) { pages = pages.concat("<a class='prev' href='" + urls + "=" + (page - 1) + "'>上一頁</a>\n"); } // 顯示分頁碼 int beginNum = 1; //起始位置 int perNum = (int) Math.floor((double) step / 2); //每邊顯示的數(shù)目 int endNums = pageCount; // 結束位置初始化為 總頁碼 if(page <= perNum){ // 如果當前頁小于等于 要顯示的一半的數(shù)目時 beginNum = 1; // 起始位置 endNums = step; // 結束位置 } else if(page > perNum){ if(page < pageCount - perNum) { // 如果當前頁大于等于 要顯示的一半的數(shù)目時, 起始位置 直接 page - perNum; beginNum = page - perNum; // 起始位置 endNums = page + perNum; // 結束位置 } else { beginNum = pageCount - step; //開始位置 endNums = pageCount; // 如果結束位置 大于 總頁碼 } } //顯示第1頁 if (beginNum > 1) { if (url.contains("?")) { pages = pages.concat("<a href='" + url + "&" + paramName + "=1'>首頁</a> ... \n"); } else { pages = pages.concat("<a href='" + url + "?" + paramName + "=1'>首頁</a> ... \n"); } } for (int i = beginNum; i <= endNums; i++) { if (i != page) { pages = pages.concat("<a href='" + urls + "=" + i + "'>" + i + "</a>\n"); } else { pages = pages.concat("<span class='current'>" + i + "</span>\n"); } } //顯示最后1頁 if (endNums < pageCount) { pages = pages.concat(" ... <a class='prev' href='" + urls + "=" + pageCount + "'>尾頁</a>\n"); } // 顯示下一頁 if (page < pageCount) { pages = pages.concat("<a class='prev' href='" + urls + "=" + (page + 1) + "'>下一頁</a>\n"); } } return pages; } }
調(diào)用如下:
public String selectStudent( @RequestParam(defaultValue = "1") Integer page , @RequestParam(defaultValue="2") Integer pageSize, Student student, Model model,HttpServletRequest request) { PageHelper.startPage(page,pageSize);//開始分頁 List<Student> lists = studentService.selectStudent(student); PageInfo<Student> pageInfo = new PageInfo<Student>(lists);//封裝分頁數(shù)據(jù) int total = (int) pageInfo.getTotal(); //總記錄數(shù) int size = pageSize; //每頁記錄數(shù) int step = 9; String pages = Pager.getPages(total, size, step, page, request, "page"); model.addAttribute("pageInfo",pageInfo); model.addAttribute("pages",pages); return "studentlist"; }
顯示效果如下:
下載源代碼: