分页的轻量实现




为我们的项目写的一个轻量的分页API。目的在于将分页与数据查询的逻辑完全剥离。我以前看过robbin发的通过detachedCriteria实现的分页那片贴子,里面把分页和数据查询结合在一起了。而我觉得分开更轻量,而且替换也比较容易。但是这个实现中有一个反模式,在逻辑中生成了代码,无奈之选,为了简便。其中字符生成可以自己扩展i18n实现,应该非常容易。
分页实现的接口:
package  com.goldnet.framework.util.paging;

/** */ /**
 * 分页操作的接口
 * 
@author Tin
 
*/

public   interface  IPagination  {

    
/** *//**
     * 默认的分页大小
     
*/

    
public static final int DEFAULT_PAGE_SIZE = 15;

    
/** *//**
     * 默认的分页参数,指URL中用到的参数名
     
*/

    
public static final String PAGE_SIZE_KEY = "pageSize";

    
/** *//**
     * 默认的页码参数,指URL中用到的参数名
     
*/

    
public static final String PAGE_NO_KEY = "pageno";

    
/** *//**
     * 获取总页数
     * 
@return 总页数
     
*/

    
int getPageSum();

    
/** *//**
     * 下一页的页码
     * 
@return
     
*/

    
int getNextPageNo();

    
/** *//**
     * 上一页的页码
     * 
@return
     
*/

    
int getPrevPageNo();

    
/** *//**
     * 是否有下一页,即是否为最后一页
     * 
@return 是否有下一页
     
*/

    
boolean hasNextPage();

    
/** *//**
     * 是否有上一页,即是否为第一页
     * 
@return 是否有上一页
     
*/

    
boolean hasPrevPage();

    
/** *//**
     * 添加参数名称、值对,如果页面需要使用parameters传递分页外的附加参数
     * 
@param parameterName 参数名
     * 
@param parameterValue 参数值
     
*/

    
void addPageParameter(String parameterName, String parameterValue);

    String getPageUrl();

    String getPageHtmlStr();

    
int getItemSum();

    
void setItemSum(int itemSum);

    String getPageExtension();

    
void setPageExtension(String pageExtension);

    String getPageName();

    
void setPageName(String pageName);

    
int getPageNo();

    
void setPageNo(int pageNo);

    
int getPageSize();

    
void setPageSize(int pageSize);

}

抽象基类:
/** */ /**
 *
 
*/

package  com.goldnet.framework.util.paging;

import  java.util.Iterator;
import  java.util.LinkedList;
import  java.util.List;


/** */ /**
 * 对PagingString的重构
 * 
@author Tin
 *
 
*/

public   abstract   class  AbstractPagination  implements  IPagination  {
    
/** *//**
     * Page上显示的List中的domainModel的总数
     
*/

    
protected int itemSum = -1;

    
/** *//**
     * 分页的大小
     
*/

    
protected int pageSize = DEFAULT_PAGE_SIZE;

    
/** *//**
     * 页数
     
*/

    
protected int pageNo = 0;

    
/** *//**
     * 分页的页面的相对URL,不包括后缀
     
*/

    
protected String pageName = null;

    
/** *//**
     * 页面的URL的后缀
     
*/

    
protected String pageExtension = ".action";

    
/** *//**
     * 参数列表
     
*/

    
protected List<PageParameter> parameterList = new LinkedList<PageParameter>();

    
/** *//**
         * 返回的分页信息的字符串
         
*/

    
protected String pageHtmlStr = null;

    
/** *//**
     * 默认的构造函数
     * 
@param pageName 分页的页面的相对URL,不包括后缀
     * 
@param pageExtension 页面的URL的后缀
     * 
@param itemSum Page上显示的List中的domainModel的总数
     * 
@param pageNo 页数
     * 
@param pageSize 分页的大小
     
*/

    
public AbstractPagination(String pageName, String pageExtension,
        
int itemSum, int pageNo, int pageSize) {
        
super();

        
this.pageName = pageName;
        
this.pageExtension = pageExtension;
        
this.itemSum = itemSum;
        
this.pageNo = pageNo;
        
this.pageSize = pageSize;
    }


    
/** *//**
     * 无PageSize构造函数,使用默认PageSize为15
     * 
@param pageName 分页的页面的相对URL,不包括后缀
     * 
@param pageExtension 页面的URL的后缀
     * 
@param itemSum Page上显示的List中的domainModel的总数
     * 
@param pageNo 页数
     
*/

    
public AbstractPagination(String pageName, String pageExtension,
        
int itemSum, int pageNo) {
        
super();

        
this.pageName = pageName;
        
this.pageExtension = pageExtension;
        
this.itemSum = itemSum;
        
this.pageNo = pageNo;
    }


    
/**//* (non-Javadoc)
     * @see com.goldnet.framework.util.paging.IPagination#getPageSum()
     
*/

    
public int getPageSum() {
        
if ((itemSum != -1&& (pageSize > 0)) {
            
return ((itemSum % pageSize) == 0? (itemSum / pageSize)
                                               : ((itemSum 
/ pageSize) + 1);
        }


        
return 0;
    }


    
/**//* (non-Javadoc)
     * @see com.goldnet.framework.util.paging.IPagination#getNextPageNo()
     
*/

    
public int getNextPageNo() {
        
return (pageNo < (getPageSum() - 1)) ? (pageNo + 1) : (getPageSum() -
        
1);
    }


    
/**//* (non-Javadoc)
     * @see com.goldnet.framework.util.paging.IPagination#getPrevPageNo()
     
*/

    
public int getPrevPageNo() {

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