java分頁技術

package test.dao;

 

import java.util.List;

 

/**

 * 用於分頁的工具類

 * @author bin

 */

public class Pager<T> {

 

    private List<T> list; //對象記錄結果集

    private int total = 0; // 總記錄數

    private int limit = 20; // 每頁顯示記錄數

    private int pages = 1; // 總頁數

    private int pageNumber = 1; // 當前頁

   

    private boolean isFirstPage=false;        //是否爲第一頁

        private boolean isLastPage=false;         //是否爲最後一頁

        private boolean hasPreviousPage=false;   //是否有前一頁

        private boolean hasNextPage=false;       //是否有下一頁

   

    private int navigatePages=8; //導航頁碼數

    private int[]navigatePageNumbers;  //所有導航頁號

   

    public Pager(int total, int pageNumber) {

       init(total, pageNumber, limit);

    }

   

    public Pager(int total, int pageNumber, int limit) {

       init(total, pageNumber, limit);

    }

   

    private void init(int total, int pageNumber, int limit){

       //設置基本參數

       this.total=total;

       this.limit=limit;

       this.pages=(this.total-1)/this.limit+1;

       

        //根據輸入可能錯誤的當前號碼進行自動糾正

       if(pageNumber<1){

           this.pageNumber=1;

       }else if(pageNumber>this.pages){

           this.pageNumber=this.pages;

       }else{

           this.pageNumber=pageNumber;

       }

       

       //基本參數設定之後進行導航頁面的計算

       calcNavigatePageNumbers();

       

       //以及頁面邊界的判定

       judgePageBoudary();

    }

   

    /**

     * 計算導航頁

     */

    private voidcalcNavigatePageNumbers(){

       //當總頁數小於或等於導航頁碼數時

       if(pages<=navigatePages){

           navigatePageNumbers=new int[pages];

           for(int i=0;i<pages;i++){

                navigatePageNumbers[i]=i+1;

           }

       }else{ //當總頁數大於導航頁碼數時

           navigatePageNumbers=new int[navigatePages];

           int startNum=pageNumber-navigatePages/2;

           int endNum=pageNumber+navigatePages/2;

           

           if(startNum<1){

                startNum=1;

                //(最前navigatePages頁

                for(inti=0;i<navigatePages;i++){

                    navigatePageNumbers[i]=startNum++;

                }

           }else if(endNum>pages){

                endNum=pages;

                //最後navigatePages頁

                for(inti=navigatePages-1;i>=0;i--){

                   navigatePageNumbers[i]=endNum--;

               }

           }else{

                //所有中間頁

                for(inti=0;i<navigatePages;i++){

                   navigatePageNumbers[i]=startNum++;

                }

           }

       }

    }

 

    /**

     * 判定頁面邊界

     */

    private void judgePageBoudary(){

       isFirstPage = pageNumber == 1;

       isLastPage = pageNumber == pages && pageNumber!=1;

       hasPreviousPage = pageNumber > 1;

       hasNextPage = pageNumber < pages;

    }

   

   

    public voidsetList(List<T> list) {

        this.list = list;

    }

 

    /**

     * 得到當前頁的內容

     * @return {List}

     */

    public List<T>getList() {

       return list;

    }

 

    /**

     * 得到記錄總數

     * @return {int}

     */

    public int getTotal() {

       return total;

    }

 

    /**

     * 得到每頁顯示多少條記錄

     * @return {int}

     */

    public int getLimit() {

       return limit;

    }

 

    /**

     * 得到頁面總數

     * @return {int}

     */

    public int getPages() {

       return pages;

    }

 

    /**

     * 得到當前頁號

     * @return {int}

     */

    public int getPageNumber() {

       return pageNumber;

    }

 

 

    /**

     * 得到所有導航頁號

     * @return {int[]}

     */

    public int[]getNavigatePageNumbers() {

       return navigatePageNumbers;

    }

 

    public boolean isFirstPage() {

       return isFirstPage;

    }

 

    public boolean isLastPage() {

       return isLastPage;

    }

 

    public boolean hasPreviousPage() {

       return hasPreviousPage;

    }

 

    public boolean hasNextPage() {

       return hasNextPage;

    }

 

    public String toString(){

       StringBuffer sb=new StringBuffer();

       sb.append("[")

           .append("total=").append(total)

           .append(",pages=").append(pages)

           .append(",pageNumber=").append(pageNumber)

           .append(",limit=").append(limit)

           .append(",isFirstPage=").append(isFirstPage)

           .append(",isLastPage=").append(isLastPage)

           .append(",hasPreviousPage=").append(hasPreviousPage)

           .append(",hasNextPage=").append(hasNextPage)

       .append(",navigatePageNumbers=");

       int len=navigatePageNumbers.length;

       if(len>0)sb.append(navigatePageNumbers[0]);

       for(int i=1;i<len;i++){

           sb.append(" "+navigatePageNumbers[i]);

       }

       sb.append(",list.size="+list.size());

       sb.append("]");

       return sb.toString();

    }

}

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