正在阅读:解决MVC下分页显示的问题解决MVC下分页显示的问题

2005-07-12 10:07 出处: 作者:ponky 责任编辑:moningfeng

  由于是写分页的,当然也是要有一个page的类,具体代码如下,由于有很多注释,不用一一介绍了:

package com.util;

/**
* Title: 分页对象

* Description: 用于包含数据及分页信息的对象

*Page类实现了用于显示分页信息的基本方法,但未指定所含数据的类型,
*可根据需要实现以特定方式组织数据的子类,

*如RowSetPage以RowSet封装数据,ListPage以List封装数据

* Copyright: Copyright (c) 2002

* @author evan_zhao@hotmail.com

* @version 1.0
*/
public class Page implements java.io.Serializable {
public static final Page EMPTY_PAGE = new Page();
public static final int DEFAULT_PAGE_SIZE = 2;
public static final int MAX_PAGE_SIZE = 2;

private int myPageSize = DEFAULT_PAGE_SIZE;

private int start;
private int avaCount,totalSize;
private Object[][] data=null;

private int currentPageno;
private int totalPageCount;

/**
* 默认构造方法,只构造空页
*/
public Page(){
this.init(0,0,0,DEFAULT_PAGE_SIZE,null);
}
/**
*构造分页对象
*@param crs 包含一页数据的OracleCachedRowSet
*@param start 该页数据在数据库中的起始位置
*@param totalSize 数据库中包含的记录总数
*@param pageSize 本页能容纳的记录数
*/
public Page(Object[][] crs, int start, int totalSize, int pageSize) {
try{
int avaCount=0;
if (crs!=null) {
avaCount = crs.length;
}
data = crs;
this.init(start,avaCount,totalSize,pageSize,data);
}catch(Exception ex){
throw new RuntimeException(ex.toString());
}
}

/**
* 分页数据初始方法
* @param start 本页数据在数据库中的起始位置
* @param avaCount 本页包含的数据条数
* @param totalSize 数据库中总记录条数
* @param pageSize 本页容量
* @param data 本页包含的数据
*/
protected void init(int start, int avaCount, int totalSize, int pageSize, Object[][] data){

this.avaCount =avaCount;
this.myPageSize = pageSize;

this.start = start;
this.totalSize = totalSize;

this.data=data;

//System.out.println("avaCount:"+avaCount);
//System.out.println("totalSize:"+totalSize);
if (avaCount>totalSize) {
//throw new RuntimeException("记录条数大于总条数?!");
}

this.currentPageno = (start -1)/pageSize +1;
this.totalPageCount = (totalSize + pageSize -1) / pageSize;

if (totalSize==0 && avaCount==0){
this.currentPageno = 1;
this.totalPageCount = 1;
}
//System.out.println("Start Index to Page No: " + start + "-" + currentPageno);
}

public Object[][] getData(){
return this.data;
}

/**
* 取本页数据容量(本页能包含的记录数)
* @return 本页能包含的记录数
*/
public int getPageSize(){
return this.myPageSize;
}

/**
* 是否有下一页
* @return 是否有下一页
*/
public boolean hasNextPage() {
/*
if (avaCount==0 && totalSize==0){
return false;
}
return (start + avaCount -1) < totalSize;
*/
return (this.getCurrentPageNo() }

/**
* 是否有上一页
* @return 是否有上一页
*/
public boolean hasPreviousPage() {
/*
return start > 1;
*/
return (this.getCurrentPageNo()>1);
}

/**
* 获取当前页第一条数据在数据库中的位置
* @return
*/
public int getStart(){
return start;
}

/**
* 获取当前页最后一条数据在数据库中的位置
* @return
*/
public int getEnd(){
int end = this.getStart() + this.getSize() -1;
if (end<0) {
end = 0;
}
return end;
}

/**
* 获取上一页第一条数据在数据库中的位置
* @return 记录对应的rownum
*/
public int getStartOfPreviousPage() {
return Math.max(start-myPageSize, 1);
}


/**
* 获取下一页第一条数据在数据库中的位置
* @return 记录对应的rownum
*/
public int getStartOfNextPage() {
return start + avaCount;
}

/**
* 获取任一页第一条数据在数据库中的位置,每页条数使用默认值
* @param pageNo 页号
* @return 记录对应的rownum
*/
public static int getStartOfAnyPage(int pageNo){
return getStartOfAnyPage(pageNo, DEFAULT_PAGE_SIZE);
}

/**
* 获取任一页第一条数据在数据库中的位置
* @param pageNo 页号
* @param pageSize 每页包含的记录数
* @return 记录对应的rownum
*/
public static int getStartOfAnyPage(int pageNo, int pageSize){
int startIndex = (pageNo-1) * pageSize + 1;
if ( startIndex < 1) startIndex = 1;
//System.out.println("Page No to Start Index: " + pageNo + "-" + startIndex);
return startIndex;
}

/**
* 取本页包含的记录数
* @return 本页包含的记录数
*/
public int getSize() {
return avaCount;
}

/**
* 取数据库中包含的总记录数
* @return 数据库中包含的总记录数
*/
public int getTotalSize() {
return this.totalSize;
}

/**
* 取当前页码
* @return 当前页码
*/
public int getCurrentPageNo(){
return this.currentPageno;
}

/**
* 取总页码
* @return 总页码
*/
public int getTotalPageCount(){
return this.totalPageCount;
}

}

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品