package org.howsun.dao.page;
import java.io.Serializable;
import javax.servlet.http.HttpServletRequest;
import org.howsun.util.Webs;
/**
* @Description:数据分页
*
* @author 张纪豪
* @Date 2007-9-16
* @version v3.0
*/
public class Page implements Serializable {
private static final long serialVersionUID = -625302977128629259L;
/**URL传递的页码参数名**/
public static final String PAGE_NUMBER_PARAMETER_NAME = "pageIndex";
/**URL传递的页数参数名**/
public static final String PAGE_TOTAL_PARAMETER_NAME = "pageCount";
/**作用域中的页对象**/
public static final String SCOPE_NAME = Page.class.getName() + ".pageBean";
/**当前页**/
private int pageIndex;
/**每页数据量**/
private int pageSize = 10;
/**总共数据量**/
private int totalCount;
/**页码跳转路径**/
private String url;
//////////////////////////////////////////////////////////
/**
* @param pageIndex 当前页码
*/
public Page(int pageIndex){
if(pageIndex < 1)
pageIndex = 1;
this.pageIndex = pageIndex;
}
/**
* @param pageIndex 当前页码
* @param pageSize 每页数量
*/
public Page(int pageIndex, int pageSize){
this(pageIndex);
this.pageSize = pageSize;
}
/**
* @param pageIndex 当前页码
* @param pageSize 每页数量
* @param url 页码上的地址
*/
public Page(int pageIndex, int pageSize, String url){
this(pageIndex, pageSize);
this.url = url;
}
/**
* 自动填充当前页码和总记录数
* @param pageIndex 页码
* @param pageSize 每页数量
* @param pageCount 总页数
* @param url 页码上的地址
*/
public Page(int pageIndex, int pageSize, int pageCount, String url){
this(pageIndex, pageSize, url);
this.totalCount = this.pageSize * pageCount;
}
/**
* 自动填充当前页码和总记录数
* @param request HttpServletRequest对象
* @param pageSize 每页数量
* @param url 页码上的地址
*/
public Page(HttpServletRequest request, int pageSize, String url){
//this.pageSize = pageSize;
//this.pageIndex = Webs.getIntByRequestParameter(request, PAGE_NUMBER_PARAMETER_NAME, 1);
//int pageCount = Webs.getIntByRequestParameter(request, PAGE_TOTAL_PARAMETER_NAME, 0);
//this.totalCount = this.pageSize * pageCount;
//this.url = url;
this(Webs.getIntByRequestParameter(request, PAGE_NUMBER_PARAMETER_NAME, 1),
pageSize,
Webs.getIntByRequestParameter(request, PAGE_TOTAL_PARAMETER_NAME, 0),
url);
}
//////////////////////////////////////////////////////////
/**
* 将Page对象置入HttpServletRequest域中
*/
public void setToScope(HttpServletRequest request){
request.setAttribute(SCOPE_NAME, this);
}
//////////////////////////////////////////////////////////
public void setPageIndex(int pageIndex) {
if(pageIndex < 1)
pageIndex = 1;
this.pageIndex = pageIndex;
}
public int getPageIndex() {
return this.pageIndex;
}
/**
* 总记录
* @return int
*/
public int getTotalCount() {
return this.totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
/**
* 每页数据大小
* @return int
*/
public int getPageSize() {
return this.pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
/**
* 页中的第一条记录
* @return int
*/
public int getFirstIndex(){
return (this.pageIndex - 1) * this.pageSize;
}
/**
* 页中的最后一条记录
* @return int
*/
public int getLastIndex(){
int n = getFirstIndex() + this.pageSize;
if (n > this.totalCount)
n = this.totalCount;
return n;
}
/**
* 总页数
* @return int
*/
public int getPageCount() {
if (this.totalCount == 0)
return 0;
return this.totalCount / this.pageSize + ((this.totalCount % this.pageSize == 0) ? 0 : 1);
}
public boolean isEmpty() {
return this.totalCount == 0;
}
public boolean getHasPrevious() {
return this.pageIndex > 1;
}
public boolean getHasNext() {
return this.pageIndex < getPageCount();
}
public String getUrl() {
return this.url;
}
public void setUrl(String url) {
this.url = url;
}
private Paginations printer = null;
/**
* 输出分页代码
* @return
*/
public String print(){
if(this.printer == null){
this.printer = new Paginations(this);
}
return printer.print();
}
/**
* 可配置输出分页代码
* @param displayTotalPages 是否显示总页数
* @param displayTotalRecords 是否显示总记录
* @param imagePath 页码图片
* @param paginationStyleForCurrent 当前页CSS样式
* @param paginationStyleForLinked 链接页CSS样式
* @return
*/
public String print(boolean displayTotalPages, boolean displayTotalRecords, String paginationStyleForCurrent, String paginationStyleForLinked){
if(this.printer == null){
this.printer = new Paginations(this);
}
return printer.print(displayTotalPages, displayTotalRecords, paginationStyleForCurrent, paginationStyleForLinked);
}
}