天天看點

分頁工具類——PageInfo

使用方式

前端需要送出參數目前頁數currentPage,背景從資料庫中查詢出資料并将資料封裝到PageInfo類中,把封裝好的pageInfo對象傳遞給前端并解析。

//根據查詢結果傳回list集合的資料
	  List<Goods> data = userService.findAll();
	  //建立一個PageInfo對象,傳入泛型類
      PageInfo<Goods> pageInfo = new PageInfo<Goods>();
      /* 
      封裝pageInfo資料 :
     	 第一個參數為list集合的資料
     	 第二個參數為目前頁
     	 第三個參數為每頁顯示資料條數
      */
      pageInfo.setPageInfo(data,currentPage,12);
           

前端代碼

<!-- 顯示分頁資訊 -->
    <div class="col-md-12" style="text-align: center;">
        <div class="col-md-6 col-sm-offset-3" id="page_nav_area">

            <nav aria-label="Page navigation ">
                <ul class="pagination">
                 <!-- 跳轉的背景方法,目前頁currentPage=1 -->
                    <li><a href="${Path}/UserController/mainUI?currentPage=1">首頁</a></li>
                     <!-- 判斷是否有上一頁 -->
                    <c:if test="${pageInfo.hasPrePage}">
                        <li>
                        <!-- 如果有上頁,currentPage=上一頁 -->
                            <a href="${Path}/UserController/mainUI?currentPage=${pageInfo.prePage}" aria-label="Previous">
                                <span aria-hidden="true">&laquo;</span>
                            </a>
                        </li>
                    </c:if>
					<!-- 循環顯示頁碼 -->
                    <c:forEach var="array" items="${pageInfo.pageArray}">
                        <c:choose>
                       		<!-- 如果等于目前頁,則選中 -->
                            <c:when test="${pageInfo.currentPage == array}">
                                <li class="active"><a href="#">${array}</a></li>
                            </c:when>
                            <c:otherwise>
                            <!-- 如果不等于目前頁,則正常顯示 -->
                                <li><a href="${Path}/UserController/mainUI?currentPage=${array}">${array}</a></li>
                            </c:otherwise>
                        </c:choose>
                    </c:forEach>
                    <!-- 判斷是否有下一頁 -->
                    <c:if test="${pageInfo.hasNextPage}">
                        <li>
                        <!-- 如果有上頁,currentPage=下一頁 -->
                            <a href="${Path}/UserController/mainUI?currentPage=${pageInfo.nextPage}" aria-label="Next">
                                <span aria-hidden="true">&raquo;</span>
                            </a>
                        </li>
                    </c:if>
                    <!-- 跳轉尾頁,目前頁currentPage=最大頁數 -->
                    <li><a href="${Path}/UserController/mainUI?currentPage=${pageInfo.pageCount}">尾頁</a></li>
                </ul>

                <ul class="pagination">
                <!-- 顯示總條數,總頁數 -->
                    <li>
                        <span class="label label-info" style="font-size: 15px;">總${pageInfo.totalRecord}條,共${pageInfo.pageCount}頁</span>
                    </li>
                </ul>
            </nav>
        </div>
    </div>

           

效果

PageInfo中的屬性

//目前頁
    private int currentPage;
    //總頁數
    private int pageCount;
    //總條數
    private int totalRecord;
    //頁面大小
    private int pageSize;
    //是否有下一頁
    private boolean hasNextPage;
    //是否有上一頁
    private boolean hasPrePage;
    //目前頁碼數組
    private int[] pageArray;
    //目前頁資料
    private List<T> list;
    //下一頁
    private int nextPage;
    //上一頁
    private int prePage;
    //是否是第一頁
    private boolean isFirstPage;
    //是否是最後一頁
    private boolean isLastPage;
    //開始行數
    private int startRow;
    //結束行數
    private int endRow;
    //需要顯示多少頁
    private int navigatePages;
    
	public PageInfo() {
        this.navigatePages = 5;		//預設顯示5頁
        this.hasPrePage = true;
        this.hasNextPage = true;
        this.isFirstPage = false;
        this.isLastPage = true;
    }
           

設定分頁參數和資料

//計算頁碼邏輯
    public void setPageInfo(List<T> list,int currentPage,int pageSize){
        this.currentPage = currentPage;
        this.pageSize = pageSize;
        this.totalRecord = list.size();
        this.pageCount = (int)Math.ceil((totalRecord*1.0) / pageSize);

        //判斷是否有無前頁或後頁
        if (currentPage == 1){
            this.hasPrePage = false;
            this.prePage = -1;
            this.isFirstPage = true;
        }else {
            this.prePage = currentPage - 1;
        }
        if (currentPage == pageCount){
            this.hasNextPage = false;
            this.nextPage = -1;
            this.isLastPage = true;
        }else {
            this.nextPage = currentPage + 1;
        }

        this.pageArray = this.culArray(currentPage,pageSize,totalRecord,pageCount);
        this.startRow = (currentPage-1)*pageSize + 1;
        this.endRow = startRow+pageSize-1;
        if (endRow>totalRecord){
            endRow = totalRecord;
        }

        this.list = new ArrayList<>();
        for (int i=0;i<(endRow-startRow+1);i++){
            this.list.add(list.get(startRow-1+i));
        }
    }

    //計算顯示的頁數
    private int[] culArray(int currentPage,int pageSize,int totalRecord,int pageCount){
        int[] array;
        if (pageCount<=navigatePages){
            array = new int[pageCount];
            for (int i=0;i<pageCount;i++){
                array[i] = i + 1;
            }
        }else {
            array = new int[navigatePages];
            if (currentPage <= (navigatePages/2)){
                for (int i=0;i<navigatePages;i++){
                    array[i] = i + 1;
                }
            }
            else {
                int x = pageCount-(navigatePages/2);
                if (currentPage>x){
                    int start = pageCount - navigatePages + 1;
                    for (int i=0;i<navigatePages;i++){
                        array[i] = start + i;
                    }
                }else {
                    int start = currentPage - (navigatePages/2);
                    for (int i=0;i<navigatePages;i++){
                        array[i] = start + i;
                    }
                }
            }
        }
        return array;
    }
           

完整代碼

碼雲位址:分頁工具類PageInfo