Tin's Blog

You are coming a long way, baby~Thinking, feeling, memory...

  语源科技BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  128 随笔 :: 0 文章 :: 221 评论 :: 0 Trackbacks



为我们的项目写的一个轻量的分页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()
     
*/