自定義分頁工具類
後臺代碼:
package com.bootdo.utils;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/******
* 分頁工具類
*/
public class PageUtil {
/***
* 總數
*/
private Integer total;
/****
* 當前頁的數據
*/
private List rows;
/****
* 總頁數
*/
private Integer totalPages;
/******
* 當前頁
*/
private Integer curPage=1;
/****
* 每頁多少條
*/
private Integer pageSize=10;
/******
* 分頁跳轉地址
*/
private String linkUrl;
public Integer getTotal() {
return total;
}
/*****
*
* 當設置總數,可以算出總頁數
* @param total 總頁數
*/
public void setTotal(Integer total) {
if(totalPages==null){
if(total%this.getPageSize()==0){
totalPages=total/this.getPageSize();
}else{
totalPages=total/this.getPageSize()+1;
}
}
this.total = total;
}
public List getRows() {
return rows;
}
public void setRows(List rows) {
this.rows = rows;
}
public Integer getCurPage() {
return curPage;
}
public void setCurPage(Integer curPage) {
if(curPage!=null){
this.curPage = curPage;
}
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
/****
* 得到偏移量
* 根據當前頁和 每頁多少得到 偏移量
* @return
*/
public Integer getOffset() {
return (this.getCurPage()-1)*pageSize;
}
/*****
* 得到總頁數,根據總數 和每頁多少條
* @return
*/
public Integer getTotalPages() {
if(totalPages==null){
if(this.getTotal()%this.getPageSize()==0){
totalPages=this.getTotal()/this.getPageSize();
}else{
totalPages=this.getTotal()/this.getPageSize()+1;
}
}
return totalPages;
}
/*****
* 得到分頁的最後一頁
* @return
*/
public Integer getLastNumber() {
Integer lastNumber = 0;
if(this.getTotal()<this.getCurPage()*this.getPageSize()){
lastNumber=this.getTotal();
}else{
lastNumber=this.getCurPage()*this.getPageSize();
}
return lastNumber;
}
public void setTotalPages(Integer totalPages) {
this.totalPages = totalPages;
}
/*****
* 分頁初始化 嵌套 mybatis
* @param curPageObj 當前頁
* @param pageSizeObj 每頁多少條
*/
public Page getInstantiation (Object curPageObj, Object pageSizeObj){
try {
curPage = curPageObj==null?getCurPage():Integer.parseInt(curPageObj.toString());
pageSize = pageSizeObj==null?getPageSize():Integer.parseInt(pageSizeObj.toString());
}catch (NumberFormatException e){
throw new NumberFormatException(e.getMessage());
}
Integer pageIndex = (curPage-1)*pageSize;
PageHelper.clearPage();
Page page = PageHelper.offsetPage(pageIndex,pageSize);
return page;
}
/****
* 得到分頁的參數
* @return
*/
public Map<String, Object> getPageParam() {
Map<String,Object> pageParam = new HashMap<>();
generatePageData(pageParam);
generatePageLinkUrl(pageParam);
return pageParam;
}
/*****
* 生成鏈接地址
* @param pageParam
*/
private void generatePageLinkUrl(Map<String,Object> pageParam){
Integer start = pageParam.get("start")==null?0:(Integer)pageParam.get("start");
Integer count = pageParam.get("count")==null?1:(Integer)pageParam.get("count");
pageParam.put("firstPage",getLinkUrl().replace("{{curPage}}","1"));
pageParam.put("lastPage",getLinkUrl().replace("{{curPage}}",getTotalPages().toString()));
pageParam.put("prvPage",getLinkUrl().replace("{{curPage}}",(getCurPage()-1)+""));
pageParam.put("nextPage",getLinkUrl().replace("{{curPage}}",(getCurPage()+1)+""));
List<Object> dataList = new ArrayList<>();
for(int i=start;i<=count;i++){
JSONObject jsonObject = new JSONObject();
jsonObject.put("linkUrl",getLinkUrl().replace("{{curPage}}",i+""));
jsonObject.put("value",i);
dataList.add(jsonObject);
}
pageParam.put("data",dataList);
}
/*****
* 生成頁面數據
* @param pageParam
*/
private void generatePageData(Map<String,Object> pageParam){
Integer start = 1;
if(getTotalPages()>10){
if(getCurPage()>6){
start=getCurPage()-4;
}else{
start=1;
}
}else{
start=1;
}
Integer count=0;
if(getTotalPages()<10){
count=getTotalPages();
}else{
count=start+9;
}
pageParam.put("start",start);
pageParam.put("count",count);
}
public String getLinkUrl() {
return linkUrl;
}
public void setLinkUrl(String linkUrl) {
this.linkUrl = linkUrl;
}
}
前段代碼:
<div th:fragment="page" >
<dl>
<dd th:if="${page.curPage gt 1}">
<a th:href="${page.pageParam.prvPage}" class="prv">
<i class="icon icon-angle-left"></i>
上一頁
</a>
</dd>
<dd th:if="${page.pageParam.start > 2}">
<a th:href="${page.pageParam.firstPage}" class="page">1</a>
</dd>
<dd th:if="${page.pageParam.start > 2}">
<a href="#" class="page disable">
...
</a>
</dd>
<dd th:each="data:${page.pageParam.data}">
<a th:if="${page.curPage==data.value}" th:href="${data.linkUrl}" class="page active" th:text="${data.value}"></a>
<a th:if="${page.curPage!=data.value}" th:href="${data.linkUrl}" class="page" th:text="${data.value}"></a>
</dd>
<dd th:if="${page.curPage lt page.totalPages}">
<a th:href="${page.pageParam.nextPage}" class="next">
下一頁
<i class="icon icon-angle-right"></i>
</a>
</dd>
</dl>
</div>
效果圖