分页对象

来源:互联网 发布:兼职数据录入招聘 编辑:程序博客网 时间:2024/06/05 21:52

 

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 此类用作对页面翻页时分页进行控制
 * 在本类中特别注意pageSize这个属性
 * 因为查询的结果为了统一方便
 * 有时候采取列表显示,有些时候则采取树型展示
 * 所以当用到树型展示的时候,则不需要分页
 * 为此约定:当pageSize的值为-1的时候,说明采取属性展示,不进行分页
 */
public class PageController {

 //总行数
 private int totalRowsAmount;
 
 //每页行数,默认为15
 private int pageSize = 15;
 
 //总页数
 private int totalPages;
 
 //当前页码,默认为1
 private int currentPage = 1;
 
 //上一页
 private int previousPage;
 
 //下一页
 private int nextPage;
 
 //是否有上一页
 private boolean hasPrevious;
 
 //是否有下一页
 private boolean hasNext;
 
 //当前页起始行
 private int pageStartRow;
 
 //当前页结束行
 private int pageEndRow;
 
 //查询结果数据
 private List data;
 
 //查询记录的起始位置
 private int firstResultNum;
 
 //查询记录的结束位置
 private int maxResultNum;
 
 //记录排序的字段和顺序
 private Map orderMap;
 
 public PageController(){}
 //构造方法
 public PageController(int totalRowsAmount , int currentPage , int pageSize){
  if(pageSize==-1){
   this.totalRowsAmount = totalRowsAmount;
   this.currentPage = 1;
   this.hasNext = false;
   this.hasPrevious = false;
  }else{
   this.pageSize = pageSize;
   setPageController(totalRowsAmount,currentPage);
   setFirstAndMaxNum(currentPage,pageSize);
  }
 }
 
 // 构造方法
 public PageController(int currentPage , int pageSize){
  setFirstAndMaxNum(currentPage , pageSize);
 }
 /**
  * 通过传进来的总行数和当前页码,设置其他参数
  * @param totalRowsAmount 总行数
  * @param currentPage 当前页码
  */
 private void setPageController(int totalRowsAmount , int currentPage){
  setTotalRowsAmount(totalRowsAmount);
  setCurrentPage(currentPage);
 }
 
 /**
  * 通过传进来的总行数rows
  * 将totalRowsAmount属性赋值
  * 并且通过计算将总页数totalPages算出并赋值
  * @param rows 总行数
  */
 private void setTotalRowsAmount(int rows){
  if(rows<0)
   this.totalRowsAmount = 0;
  else
   this.totalRowsAmount = rows;
  
  //得到总页数
  if(this.totalRowsAmount%this.pageSize==0)
   this.totalPages = this.totalRowsAmount/this.pageSize;
  else
   this.totalPages = this.totalRowsAmount/this.pageSize + 1;
 }
 
 /**
  * 通过传进来的当前页码
  * 1,将currentPage属性赋值
  * 2,计算出上一页的页码和下一页的页码,并给属性赋值
  * 3,通过比较,得知是否还有上一页和下一页
  * 4,给当前起始行和当天结束行赋值
  * @param currPage 当前页码
  */
 private void setCurrentPage(int currPage){
  
  //给当前页码赋值
  if(currPage<=0){
   this.currentPage = 1;
  }else if(currPage>this.totalPages){
   this.currentPage = this.totalPages;
  }else{
   this.currentPage = currPage;
  }
  
  
  //判断是否还有上一页和下一页
  if(this.currentPage<this.totalPages){
   this.hasNext = true;
  }else{
   this.hasNext = false;
  }
  
  if(this.currentPage>1){
   this.hasPrevious = true;
  }else{
   this.hasPrevious = false;
  }
  
  //得到上一页和下一页的值
  this.nextPage = this.currentPage + 1;
  this.previousPage = this.currentPage - 1;
  
  this.pageStartRow = (this.currentPage-1)*this.pageSize + 1;
  
  //记录的索引从0开始
  this.pageStartRow = this.pageStartRow - 1;
  this.pageEndRow = this.pageStartRow + this.pageSize;
 }

 /**
  * 根据当前页的大小和页面大小
  * 计算出查询的其实位置和结束位置
  * @param currPage 当前页
  * @param pageSize 页面大小
  */
 private void setFirstAndMaxNum(int currPage , int pageSize){
  this.currentPage = currPage;
  this.pageSize = pageSize;
  this.firstResultNum = (currPage * pageSize) - pageSize;
  this.maxResultNum = currPage * pageSize;
 }
 
 public List getData() {
  return data;
 }

 public void setData(List data) {
  this.data = data;
 }

 public int getFirstResultNum() {
  if(pageSize == -1)
   return 0;
  else
   return firstResultNum;
 }

 public int getMaxResultNum() {
  if(pageSize == -1)
   return 2000;
  else
   return pageSize;
 }

 public int getCurrentPage() {
  return currentPage;
 }

 public boolean isHasNext() {
  return hasNext;
 }

 public boolean isHasPrevious() {
  return hasPrevious;
 }

 public int getNextPage() {
  return nextPage;
 }

 public int getPageEndRow() {
  return pageEndRow;
 }

 public int getPageSize() {
  return pageSize;
 }

 public int getPageStartRow() {
  return pageStartRow;
 }

 public int getPreviousPage() {
  return previousPage;
 }

 public int getTotalPages() {
  return totalPages;
 }

 public int getTotalRowsAmount() {
  return totalRowsAmount;
 }

 public void setOrderMap(Map orderMap) {
  this.orderMap = orderMap;
 }
 
 public Map getOrderMap() {
  return orderMap;
 }
 
 public String getOrderString(){
  if(orderMap==null)
   return null;
  StringBuffer result = new StringBuffer("");
  Set keys = orderMap.keySet();
  Iterator it = keys.iterator();
  while(it.hasNext()){
   String orderColumn = (String)it.next();   
   String orderType = (String)orderMap.get(orderColumn);
   result.append(orderColumn).append(" ").append(orderType).append(" ");
   if(it.hasNext())
    result.append(",");
  }
  
  return result.toString().equals("")?null:result.toString();
 }
 public void setFirstResultNum(int firstResultNum) {
  this.firstResultNum = firstResultNum;
 }
 public void setMaxResultNum(int maxResultNum) {
  this.maxResultNum = maxResultNum;
 }
}