自定義分頁工具類

自定義分頁工具類 

後臺代碼:

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>

 

效果圖

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章