分页问题............
代码如下:
import java.util.*;
/**
*
* <p> Title: </p>
*
* <p> Description: </p>
*
* <p> Copyright: Copyright (c) 2006 </p>
*
* <p> Company: </p>
*
* @author Buger
* @version 1.0
*/
public class Pager {
/**
* 当前是第几页
*/
private int curPage; //当前是第几页
/**
* 一共有多少页
*/
private int maxPage; //一共有多少页
/**
* 一共有多少条记录(行)
*/
private int maxRowCount; //一共有多少行
/**
* 每页显示多少行
*/
private int rowsPerPage; //每页显示多少行
/**
* 当前页面要显示的数据列表(包含数据库返回对象的列表)
*/
private List list; //当前页面显示的数据
/**
* 提交的表单的名称
*/
private String formName = "pageForm ";//提交的表单名称
/**
* 显示分页的前台页面路径名称
*/
private String target = " ";
/**
* 默认每页显示记录数
*/
private static int ROWS_PER_PAGE = 17;
/**
* 最后一页记录的条数(gzaqq)
*/
private static int rowNum=0;
/**
* 分页信息初始化,每页显示记录数使用默认值
*
*/
public Pager() {
this.curPage = 1;
this.maxPage = 1;
this.maxRowCount = 0;
this.rowsPerPage = ROWS_PER_PAGE;
}
/**
* 搜索关键字
*/
private String keys;
/**
* 扩展栏目类别
*/
private int itid;
/**
* <p>
* 设置当前分页页面要显示的数据对象列表
* </p>
*
* <p>
* 该对象可以是一个实现了 List 接口的任意列表
* </p>
*
* @param list -
* 实现了 List 接口的任意列表
*/
public void setList(List list) {
this.list = list;
}
/**
* 获取要在当前分页页面显示的数据对象列表
*
* @return 要显示在前台页面的数据对象列表
*/
public List getList() {
return this.list;
}
/**
* 设置记录的总行数(即所有满足条件的纪录总数)
*
* @param maxRowCount -
* 记录的总行数
*/
public void setMaxRowCount(int maxRowCount) {
this.maxRowCount = maxRowCount;
}
/**
* 获取记录的最大行数
*
* @return - 满足条件的所有记录条数
*/
public int getMaxRowCount() {
return this.maxRowCount;
}
/**
* 设置当前页数(即要显示在前台的当前页数)
*
* @param curPage -
* 当前页数
*/
public void setCurPage(int curPage) {
this.curPage = curPage;
}
/**
* 返回在前台显示的当前页数
*
* @return - 当前页数
*/
public int getCurPage() {
return this.curPage;
}
/**
* <p>
* 设置每页显示的记录条数
* </p>
* <p>
* 注意:如果每页显示的记录条数小于等于 0 ,则每页显示的记录条数将置为默认值
* </p>
*
* @param rows -
* 每页显示的记录条数
*/
public void setRowsPerPage(int rows) {
if (rows > 0) {
this.rowsPerPage = rows;
} else {
this.rowsPerPage = ROWS_PER_PAGE;
}
}
/**
* 设置页面提交表单的名称,默认为 pageForm,在一般情况下,使用默认值就能正常使用
*
* @param formName -
* 提交表单的名称
*/
public void setFormName(String formName) {
this.formName = formName;
}
/**
* 设置显示分页的前台页面路径名称
*
* @param target -
* 分页页面路径名称
*/
public void setTarget(String target) {
this.target = target;
}
public void setKeys(String keys) {
this.keys = keys;
}
public void setItid(int itid) {
this.itid = itid;
}
/**
* 获取每页显示的记录条数
*
* @return - 每页显示的记录条数
*/
public int getRowsPerPage() {
return this.rowsPerPage;
}
/**
* 最后一页记录的条数(gzaqq)
*/
public void setRowNum(int rowNum)
{
this.rowNum = rowNum;
}
public int getRowNum()
{
return this.rowNum;
}
/**
* 根据记录总数和每页显示的记录条数,计算总共有多少页
*
*/
public void setMaxPage() {
if (this.maxRowCount % this.rowsPerPage == 0) {
this.maxPage = this.maxRowCount / this.rowsPerPage;
} else {
this.maxPage = this.maxRowCount / this.rowsPerPage + 1;
}
}
/**
* 获取根据记录总数和每页显示的记录数计算得出的总页数
*
* @return - 记录总页数
*/
public int getMaxPage() {
return this.maxPage;
}
/**
* 获取前台分页页面提交表单的名称
*
* @return - 提交表单的名称
*/
public String getFormName() {
return this.formName;
}
/**
* 获取前台分页页面的路径名称
*
* @return - 前台分页页面的路径名称
*/
public String getTarget() {
return this.target;
}
public String getKeys() {
return keys;
}
public int getItid() {
return itid;
}
/**
* 获取默认每页显示的记录条数
*
[解决办法]
刚也在看别人的分页,只能帮顶顶呐....
[解决办法]
那看看我的分页:
1,初始化一些必要参数:
<%//变量声明
Integer fid=new Integer(-1);
int intPageSize; //一页显示的记录数
int intRowCount; // 记录总数
int intPageCount; //总页数
int intPage; // 待显示页码
java.lang.String strPage;
int i;
//设置一页显示的记录数
intPageSize= 8;
//取得待显示页码
strPage = request.getParameter( "page ");
if(strPage==null){//表明在QueryString中没有page这一个参数,此时显示第一页数据
intPage = 1;
}
else{//将字符串转换成整型
intPage = java.lang.Integer.parseInt(strPage);
if(intPage
<1) intPage = 1;
}
2,此处获得可逆的数据集合:(可逆:不但数据集合可以向下循环,并且需要向上循环,此处代码实现就不多说了)
ToolKit toolKit=new ToolKit();//连接数据库的一些设置和一些控制数据库方法
Connection cn = toolKit.openConn();//打开数据库连接,调用打开连接的方法
String sql = "Select * From FTMEDB.SUBJECT_SEGMENT where USERID=? order by DATEID desc ";
PreparedStatement sqlStmt=cn.prepareStatement(sql,java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);//这样写目的是为了获得可逆数据集合
sqlStmt.setString(1,(String)session.getAttribute( "id "));//通过使用封装好的PreparedStatement 类,添加条件。
ResultSet sqlRst = sqlStmt.executeQuery(); //执行SQL语句并获取结果集
3,开始获得一些分页所需要的数据,如:总页数,总记录数
if(sqlRst.next()){
sqlRst.last();//光标在最后一行
}
intRowCount = sqlRst.getRow();//获得当前行号,获取记录总数
intPageCount = (intRowCount+intPageSize-1) / intPageSize;//记算总页数
if(intPage> intPageCount) intPage = intPageCount;//调整待显示的页码
%>
4,判断一些条件,记录数大于0时操作
if( intPageCount> 0){
sqlRst.absolute((intPage-1) * intPageSize + 1);//将记录指针定位到待显示页的第一条记录上
//显示数据
int j=(intPage-1)*intPageSize+1; //获得在总记录中当前页第一条记录的记录行号,然后循环体中循环递加就可以得到当页每个记录的记录号
i = 0;
while(i <intPageSize && ! sqlRst.isAfterLast()){
//循环获得sqlRst集合的数据
sqlRst.next();
i++;
j++;
}
}
//关闭结果集
sqlRst.close();
//关闭SQL语句对象
sqlStmt.close();
//关闭数据库
cn.close();%>
5,实现页面显示页码数和当前页码数和记录总数:
<form method= "POST " name= "form1 " action= "km_clsjdmain.jsp?filialesId= <%=fid%> " onsubmit= "return validation(this) " > <DIV align=right>
第
<%=intPage%> 页 共
<%=intPageCount%> 页
<%if( intPage> 1){%>
<a href= "km_clsjdmain.jsp?page= <%=intPage-1%> "> 上一页 </a> //需要传过去上个页码
<%}%>
<%if( intPage
<intPageCount){%>
<a href= "km_clsjdmain.jsp?page= <%=intPage+1%> "> 下一页 </a> //需要传过去下个页码
<%}%>
转到第:
<input type= "text " name= "page " size= "8 "> 页
<span>
<input class=buttonface type= "submit " value= "GO " name= "cndok ">
</span>
</DIV> </form>
6,当选择填写5步中的text文本进行查询时需要用到下面js语句:
<script type= "text/javascript ">
<!---
function validation(frm){
var myRegExp =/^[0-9]*[1-9][0-9]*$/;
if(frm.page.value == ' ')
{
alert( "页数必须填写 ");
frm.page.focus();
return false;
}
if( !myRegExp.test(frm.page.value) )
{
alert( "页数只能为正整数 ");
frm.page.focus();
return false;
}
}
//--->
</script>