通用分页实现及其OO设计探讨
2. 分页抽像实现类,实现关键的算法
AbstractViewPage.java
/**//**
* 分页默认抽象实现
* 初始时,分页类有下列默认值:
* 分页大小为-1,为不分页;
* 总页数为1页
* 当前页为第一页
* 总记录数为0条
* 当前页数据列表为没有任何记录的列表
* @author ex_yuanguangdong
*
*/
public abstract class AbstractViewPage implements ViewPage ...{
![]()
//-----------------------------------------
//私有静态常量
//-----------------------------------------
![]()
private static final int DEFAULT_PAGE_INDEX = 1;
![]()
private static final int DEFALT_PAGE_COUNT = 1;
![]()
private static final int DEFAULT_PAGE_SIZE = -1;
![]()
private static final int DEFAULT_ROWS = 0;
![]()
//-----------------------------------------
//私有成员变量
//-----------------------------------------
![]()
/**//**当前页索引号**/
private int pageIndex = DEFAULT_PAGE_INDEX;
/**//**总页数**/
private int pageCount =DEFALT_PAGE_COUNT;
![]()
/**//**分页大小**/
private int pageSize = DEFAULT_PAGE_SIZE ;
![]()
/**//**数据总记录数**/
private int rows = DEFAULT_ROWS;
![]()
![]()
//------------------------------------------
//本地成员变量getter,setter方法
//------------------------------------------
![]()
![]()
/**//**
* 设置新页号,只有大于等于1而且小于等于总页数并且不为当前页时,才允许设置
* @param pageIndex The pageIndex to set.
*/
private void setPageIndex(int newPageIndex) ...{
![]()
if( newPageIndex >= this.DEFAULT_PAGE_INDEX && newPageIndex
<= this.getPageCount() && newPageIndex != this.pageIndex) ...{this.pageIndex = newPageIndex;
}
![]()
}
![]()
/**//**
* @return Returns the rows.
*/
private int getRows() ...{
return rows;
}
![]()
/**//**
* @param rows The rows to set.
*/
private void setRows(int rows) ...{
this.rows = rows;
}
/**//**
* @param pageCount The pageCount to set.
*/
private void setPageCount(int pageCount) ...{
this.pageCount = pageCount;
}
![]()
![]()
![]()
//--------------------------------------
//实现Page接口方法
//--------------------------------------
![]()
![]()
/**//**
* @see com.palic.elis.pos.junit.counter.web.mvc.ViewPage#getPageData()
*/
public List getPageData() ...{
List pageList =null;
![]()
//获得当前页数据
pageList = this.pageList(this.getPageFirstRecord(), this.getPageRows());
//保证不返回null
if(pageList == null) ...{
pageList =new ArrayList();
}
return pageList;
![]()
}
![]()
/**//**
* @see com.palic.elis.pos.junit.counter.web.mvc.ViewPage#getPageIndex()
*/
public int getPageIndex() ...{
return this.pageIndex;
}
/**//**
* @see com.palic.elis.pos.junit.counter.web.mvc.ViewPage#isFirstPage()
*/
public boolean isFirstPage() ...{
![]()
return this.DEFAULT_PAGE_INDEX ==this.pageIndex;
}
/**//**
* @see com.palic.elis.pos.junit.counter.web.mvc.ViewPage#isLastPage()
*/
public boolean isLastPage() ...{
//当前页索引为总页数时为最后一页
return this.pageIndex == this.pageCount;
}
![]()
/**//**
* @see com.palic.elis.pos.junit.counter.web.mvc.ViewPage#getHashNextPage()
*/
public boolean getHashNextPage() ...{
//当前页索引号小于总页数
return this.pageIndex < this.pageCount ;
}
![]()
/**//**
* @see com.palic.elis.pos.junit.counter.web.mvc.ViewPage#getHashPreviousPage()
*/
public boolean getHashPreviousPage() ...{
//当前页索引号大于默认的初始页号,这里为1
return this.pageIndex > this.DEFAULT_PAGE_INDEX ;
}
![]()
![]()
![]()
/**//**
* @see com.palic.elis.pos.junit.counter.web.mvc.ViewPage#getPageCount()
*/
public int getPageCount() ...{
![]()
return this.pageCount;
}
![]()
![]()
![]()
/**//**
* @see com.palic.elis.pos.junit.counter.web.mvc.ViewPage#getPageSize()
*/
public int getPageSize() ...{
![]()
return this.pageSize;
}
![]()
/**//**
* @see com.palic.elis.pos.junit.counter.web.mvc.ViewPage#getPageRows()
*/
public int getPageRows() ...{
//当页面大小为-1 时,返回总记录数
if(this.DEFAULT_PAGE_SIZE == this.pageSize ) ...{
return this.rows;
}
![]()
//不为最后一页时,返回pageSize
if(!this.isLastPage()) ...{
return this.pageSize;
}
//最后一页时
return this.rows - (this.pageSize * (this.pageCount -1));
}
![]()
![]()
![]()
/**//**
* @see com.palic.elis.pos.junit.counter.web.mvc.ViewPage#getPageFirstRecord()
*/
public int getPageFirstRecord() ...{
![]()
//页大小为-1 时
if(this.DEFAULT_PAGE_SIZE== this.pageSize ) ...{
return 0;
}
return (this.pageIndex -1)* this.pageSize;
}
![]()
/**//**
* @see com.palic.elis.pos.junit.counter.web.mvc.ViewPage#getPageLastRecord()
*/
public int getPageLastRecord() ...{
//页大小为-1时,返回总记录数
if(this.DEFAULT_PAGE_SIZE == this.pageSize) ...{
return this.rows;
}
return this.getPageFirstRecord() + this.getPageRows() ;
}
/**//**
* @see com.palic.elis.pos.junit.counter.web.mvc.ViewPage#gotoFirstPage()
*/
public void gotoFirstPage() ...{
this.gotoPage(this.DEFAULT_PAGE_INDEX);
![]()
}
![]()
/**//**
* @see com.palic.elis.pos.junit.counter.web.mvc.ViewPage#gotoLastPage()
*/
public void gotoLastPage() ...{
this.gotoPage(this.getPageCount());
![]()
}
![]()
/**//**
* @see com.palic.elis.pos.junit.counter.web.mvc.ViewPage#gotoPreviousPage()
*/
public void gotoPreviousPage() ...{
this.gotoPage(this.getPageIndex() -1);
![]()
}
![]()
/**//**
* @see com.palic.elis.pos.junit.counter.web.mvc.ViewPage#gotoNextPage()
*/
public void gotoNextPage() ...{
this.gotoPage(this.getPageIndex() + 1);
![]()
}
![]()
/**//**
* @see com.palic.elis.pos.junit.counter.web.mvc.ViewPage#gotoPage(int)
*/
public void gotoPage(int newPageIndex) ...{
if( newPageIndex >= this.DEFAULT_PAGE_INDEX && newPageIndex
<= this.getPageCount() ) ...{this.setPageIndex(newPageIndex);
}
![]()
}
/**//**
* @see com.palic.elis.pos.junit.counter.web.mvc.ViewPage#setPageSize(int)
*/
public void setPageSize(int size) ...{
if(size < 1) ...{
size = 1;
}
![]()
this.pageSize = size;
![]()
//进行初始化
this.doInit();
}
![]()
//-----------------------------------
//辅助方法
//-----------------------------------
![]()
![]()
/**//**
* 分页初始化方法,为了保证总是能正确的初始化,所以声明为final ,为了让子类可以调用声明为protected
*
*/
protected final void doInit() ...{
int rows = 0;
![]()
//获得总记录数
rows= totalRows();
![]()
//设置总记录数
this.setRows(rows);
//设置新的总页数
![]()
//计算并设置总页数
int pages = calculatePageCount();
this.setPageCount(pages);
![]()
//转到第一页
this.gotoPage(this.DEFAULT_PAGE_INDEX);
![]()
onInit();
}
/**//**
* 记算总页数
* @return 总页数
*/
private int calculatePageCount() ...{
![]()
//总记录数为0条,则返回的总页数为1
if(this.getRows() == 0) ...{
return this.DEFALT_PAGE_COUNT;
}
![]()
//如果页面大小为-1,则返回的总页数为1
if(this.DEFAULT_PAGE_SIZE == this.getPageSize() ) ...{
return this.DEFALT_PAGE_COUNT;
}
![]()
return this.getRows() / this.getPageSize() + ( this.getRows()
% this.getPageSize() ==0 ? 0 :1);}
![]()
![]()
/**//**
* 获得总记录数,调用queryTotalRows(),将异常封装为non-checked 异常
* @return 总记录数
* @throws ApplicationRuntimeException
*/
private int totalRows() throws ApplicationRuntimeException...{
try...{
return queryTotalRows();
}
catch(Exception ex)...{
throw new ApplicationRuntimeException(ex);
}
}
/**//**
* 获得当前页数据,调用queryPageList()方法,将异常封装为non-checked异常
* @param startRow 开始记录号
* @param rowCount 记录总数
* @return 当前页数据
* @throws ApplicationRuntimeException
*/
private List pageList(int startRow, int rowCount) throws ApplicationRuntimeException...{
try...{
return queryPageList(startRow, rowCount);
}catch(Exception ex)...{
throw new ApplicationRuntimeException(ex);
}
}
![]()
![]()
//-----------------------------------------
//子类实现的方法
//-----------------------------------------
![]()
/**//**
* 初始化附加方法,由子类扩展
*/
protected void onInit() ...{
![]()
}
![]()
![]()
/**//**
* 查询获得总记录数,由子类具体实现
* @return 总记录数
* @throws Exception
*/
protected abstract int queryTotalRows() throws Exception;
![]()
/**//**
* 查询当前页数据,从startRow 开始的rowCount条记录
* @param startRow 开始记录号
* @param rowCount 记录总数
* @return 当前页数据
* @throws Exception
*/
protected abstract List queryPageList(int startRow, int rowCount) throws Exception;
![]()
}
0
相关文章
