一个分页支持类

参考了http://www.iteye.com/article/14657?page=3#comments文章中的PaginationSupport类实现,略微扩展了一下。

import java.util.List;

/**
 * 	ps.getItems()得到已分页好的结果集 
 *		ps.getIndexes()得到分页索引的数组 
 *		ps.getTotalCount()得到总结果数 
 *		ps.getStartIndex()当前分页索引 
 *		ps.getNextIndex()下一页索引 
 *		ps.getPreviousIndex()上一页索引
 *     @see http://www.iteye.com/article/14657?page=3#comments
 */
public class PageSupport {
  
    public final static int PAGESIZE = 30;   
  
    private int pageSize = PAGESIZE;
  
    private List items;
  
    private int totalCount;   
  
    private int[] indexes = new int[0];   
  
    private int startIndex = 0;
  
    public PageSupport(List items, int totalCount) {
        setPageSize(PAGESIZE);
        setTotalCount(totalCount);   
        setItems(items);
        setStartIndex(0);   
    }
  
    public PageSupport(List items, int totalCount, int startIndex) { 
        setPageSize(PAGESIZE);   
        setTotalCount(totalCount);   
        setItems(items);           
        setStartIndex(startIndex);   
    }
  
    public PageSupport(List items, int totalCount, int pageSize, int startIndex) {
        setPageSize(pageSize);   
        setTotalCount(totalCount);   
        setItems(items);   
        setStartIndex(startIndex);   
    } 
      
    public List getItems() {
        return items;   
    }
  
    public void setItems(List items) {   
        this.items = items;   
    }
  
    public int getPageSize() {
        return pageSize;   
    }   
  
    public void setPageSize(int pageSize) {   
        this.pageSize = pageSize;   
    }   
  
    public int getTotalCount() {   
        return totalCount;   
    }   
  
    public void setTotalCount(int totalCount) {   
        if (totalCount > 0) {   
            this.totalCount = totalCount;   
            // 81/10 = 8 
            int count = totalCount / pageSize;   
            if (totalCount % pageSize > 0)   
                count++;   
            indexes = new int[count];   
            for (int i = 0; i < count; i++) {   
                indexes[i] = pageSize * i;   
            }   
        } else {   
            this.totalCount = 0;   
        }   
    }   
  
    public int[] getIndexes() {   
        return indexes;   
    }   
  
    public void setIndexes(int[] indexes) {   
        this.indexes = indexes;   
    }   
  
    public int getStartIndex() {   
        return startIndex;   
    }   
  
    public void setStartIndex(int startIndex) {   
        if (totalCount <= 0)   
            this.startIndex = 0;   
        else if (startIndex >= totalCount)   
            this.startIndex = indexes[indexes.length - 1];   
        else if (startIndex < 0)   
            this.startIndex = 0;   
        else {   
            this.startIndex = indexes[startIndex / pageSize];   
        }   
    }   
  
    public int getNextIndex() {
        int nextIndex = getStartIndex() + pageSize;   
        if (nextIndex >= totalCount)   
            return getStartIndex();   
        else  
            return nextIndex;
    }
  
    public int getPreviousIndex() {   
        int previousIndex = getStartIndex() - pageSize;   
        if (previousIndex < 0)   
            return 0;   
        else  
            return previousIndex;   
    }
    
    
    //--------------------------------------------------------------
    
    /**
     * 末页索引
     */
    public int getLastIndex(){
    	return getIndexes()[getIndexes().length-1];
    }
    
    /**
     * 分页总数
     */
    public int getTotalPageNum(){
    	return getIndexes().length;
    }
    
    /**
     * 获得当前页码
     */
    public int getCurrentPageNum(){
    	int[] indexs = getIndexes();
    	int startIndex = getStartIndex();
    	int i=0;
    	for(i=0;i<indexs.length;i++){
    		if(startIndex == indexs[i])
    			break;
    	}
    	return (i+1);
    }
    
    /**
     * 根据页码获得分页索引值 pagenum>=1
     */
    public int getIndexByPageNum(int pagenum){
    	if(pagenum<=1)
    		return 0;
    	if(pagenum>getTotalPageNum())
    		return getLastIndex();
    	return getIndexes()[pagenum-1];
    }
    
    public boolean hasPreviousPage(){
    	return getStartIndex()==0?false:true;
    }
    
    public boolean hasNextPage(){
    	return (getCurrentPageNum() == getTotalPageNum())?false:true;
    }
    
    private String queryString = null;

	public String getQueryString() {
		return queryString;
	}

	public void setQueryString(String queryString) {
		this.queryString = queryString;
	}
  
}  

你可能感兴趣的:(分页)