分页处理的bean类PageableResultSet.java的构造函数参数为一个ResultSet对象,即执行查询语句得到的ResultSet。其具体代码如下:
public class PageableResultSet extends ResultSet{

protected java.sql.ResultSet rs = null;

protected int rowsCount;

protected int pageSize;

protected int curPage;

protected String command = "";

public PageableResultSet(java.sql.ResultSet rs)
throws java.sql.SQLException {
if (rs == null)
throw new SQLException("given ResultSet is NULL", "user");

rs.last();//将指针移动到此 ResultSet 对象的最后一行
rowsCount = rs.getRow();//检索当前行编号
rs.beforeFirst();//将指针移动到此 ResultSet 对象的开头,正好位于第一行之前

this.rs = rs;
}

/**返回当前页号
*/
public int getCurPage() {
return curPage;
}

/**返回总页数
*/
public int getPageCount() {
if (rowsCount == 0)
return 0;
if (pageSize == 0)
return 1;
// calculate PageCount
double tmpD = (double) rowsCount / pageSize;
int tmpI = (int) tmpD;
if (tmpD > tmpI)
tmpI++;
return tmpI;
}

/**返回当前页的记录条数
*/
public int getPageRowsCount() {
if (pageSize == 0)
return rowsCount;
if (getRowsCount() == 0)
return 0;
if (curPage != getPageCount())
return pageSize;
return rowsCount - (getPageCount() - 1) * pageSize;

}

/**返回分页大小
*/
public int getPageSize() {
return pageSize;
}

/**返回总记录行数
*/
public int getRowsCount() {
return rowsCount;
}

/**转到指定页
*/
public void gotoPage(int page) {
if (rs == null)
return;
if (page < 1)
page = 1;
if (page > getPageCount())
page = getPageCount();
int row = (page - 1) * pageSize + 1;
try {
rs.absolute(row);//将指针移动到此 ResultSet 对象的给定行编号
curPage = page;
} catch (java.sql.SQLException e) {
}
}

/**
* 转到当前页的第一条记录
* @exception java.sql.SQLException 异常说明。
*/
public void pageFirst() throws SQLException {
int row = (curPage - 1) * pageSize + 1;
rs.absolute(row);
}

/**
* 转到当前页的最后一条记录
* @exception java.sql.SQLException 异常说明。
*/
public void pageLast() throws SQLException {
int row = (curPage - 1) * pageSize + getPageRowsCount();
rs.absolute(row);
}

/**设置分页大小
*/
public void setPageSize(int pageSize) {
if (pageSize >= 0) {
this.pageSize = pageSize;
curPage = 1;
}
}
public boolean next() throws SQLException {
// TODO Auto-generated method stub
return rs.next();
}
}
分页action类PageAction.java的关键代码如下:
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.lyt.struts.action;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.sql.DataSource;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import bean.*;

import common.*;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import dao.ApplicationDAO;

/**
* MyEclipse Struts
* Creation date: 07-14-2007
*
* XDoclet definition:
* @struts.action validate="true"
*/
public class PageAction extends Action {
/*
* Generated Methods
*/

/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
ServletContext context = servlet.getServletContext();
//从配置文件中得到数据源
DataSource dataSource = (DataSource) context.getAttribute("db");
DB db = new DB(dataSource);
HttpSession session=request.getSession();
try{
request.setCharacterEncoding("gb2312");
}catch(Exception e){
e.printStackTrace();
}
UserBean user=(UserBean)session.getAttribute("usr");
if(user==null){
return mapping.findForward("invalidSession");
}
int staffId=user.getID();
String sappType=request.getParameter("appType");
int appType=Integer.valueOf(sappType).intValue();
ResultSet rs=ApplicationDAO.getBjsxRS(db, staffId, appType);
int pageNumber=1;
try {
pageNumber=Integer.parseInt(request.getParameter("pageNumber"));
} catch (Exception e) {
pageNumber=1;
}
PageableResultSet prs=null;
try{
prs=new PageableResultSet(rs);
}catch(Exception e){
e.printStackTrace();
}
prs.setPageSize(10);
prs.gotoPage(pageNumber);
ArrayList<Application> list =new ArrayList<Application>();
try {
for(int i=0; i<prs.getPageRowsCount(); i++) {
Application app=new Application();
list.add(app);

prs.next();
}
} catch (SQLException e) {
e.printStackTrace();
}
request.setAttribute("totalPage",prs.getPageCount());
request.setAttribute("currentPage",prs.getCurPage());
if(list.size()>0){
request.setAttribute("list", list);
}
db.close();
return mapping.findForward("page");
}
}
显示分页的page.jsp代码如下:
<%@ page language="java" pageEncoding="gb2312"
contentType="text/html;charset=gb2312"%>
<%@ page import="bean.*,common.*"%>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>主页</title>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">

<style type="text/css">
<!--
.style1 {color: #F4F4F4}
-->
</style>
</head>

<body>
<%
int currentPage = 1, totalPage = 0;
String sappType=(String)request.getAttribute("appType");
try {
currentPage = (Integer)request.getAttribute("currentPage");
} catch (Exception e) {}
try {
totalPage =(Integer)request.getAttribute("totalPage");
} catch (Exception e) {}
%>

<table>
<caption>
</caption>
<tr>
</tr>
<logic:present name="list" scope="request">
<logic:iterate id="shixiang" name="list">
<tr>
</tr>
</logic:iterate>
</logic:present>
</table>

<center>
<p>
第
<%=currentPage %>
页,共
<%=totalPage %>
页
<a href=/sky_6yt/page.do?pageNumber=1&&appType=<%=sappType %>>首页</a>
<%if(currentPage<=1){%>
上一页
<%}else{%>
<a href=/sky_6yt/page.do?pageNumber=<%=currentPage-1 %>&&appType=<%=sappType %>>上一页</a>
<%}%>
<%if(currentPage==totalPage){%>
下一页
<%}else{%>
<a href=/sky_6yt/page.do?pageNumber=<%=currentPage+1 %>&&appType=<%=sappType %>>下一页</a>
<%} %>
<a href=/sky_6yt/page.do?pageNumber=<%=totalPage %>&&appType=<%=sappType %>>末页</a>
</p>
</center>
</body>
</html>

public class PageableResultSet extends ResultSet{
protected java.sql.ResultSet rs = null;
protected int rowsCount;
protected int pageSize;
protected int curPage;
protected String command = "";
public PageableResultSet(java.sql.ResultSet rs)
throws java.sql.SQLException {
if (rs == null)
throw new SQLException("given ResultSet is NULL", "user");
rs.last();//将指针移动到此 ResultSet 对象的最后一行
rowsCount = rs.getRow();//检索当前行编号
rs.beforeFirst();//将指针移动到此 ResultSet 对象的开头,正好位于第一行之前
this.rs = rs;
}
/**返回当前页号
*/
public int getCurPage() {
return curPage;
}
/**返回总页数
*/
public int getPageCount() {
if (rowsCount == 0)
return 0;
if (pageSize == 0)
return 1;
// calculate PageCount
double tmpD = (double) rowsCount / pageSize;
int tmpI = (int) tmpD;
if (tmpD > tmpI)
tmpI++;
return tmpI;
}
/**返回当前页的记录条数
*/
public int getPageRowsCount() {
if (pageSize == 0)
return rowsCount;
if (getRowsCount() == 0)
return 0;
if (curPage != getPageCount())
return pageSize;
return rowsCount - (getPageCount() - 1) * pageSize;
}
/**返回分页大小
*/
public int getPageSize() {
return pageSize;
}
/**返回总记录行数
*/
public int getRowsCount() {
return rowsCount;
}
/**转到指定页
*/
public void gotoPage(int page) {
if (rs == null)
return;
if (page < 1)
page = 1;
if (page > getPageCount())
page = getPageCount();
int row = (page - 1) * pageSize + 1;
try {
rs.absolute(row);//将指针移动到此 ResultSet 对象的给定行编号
curPage = page;
} catch (java.sql.SQLException e) {
}
}
/**
* 转到当前页的第一条记录
* @exception java.sql.SQLException 异常说明。
*/
public void pageFirst() throws SQLException {
int row = (curPage - 1) * pageSize + 1;
rs.absolute(row);
}
/**
* 转到当前页的最后一条记录
* @exception java.sql.SQLException 异常说明。
*/
public void pageLast() throws SQLException {
int row = (curPage - 1) * pageSize + getPageRowsCount();
rs.absolute(row);
}
/**设置分页大小
*/
public void setPageSize(int pageSize) {
if (pageSize >= 0) {
this.pageSize = pageSize;
curPage = 1;
}
}public boolean next() throws SQLException {
// TODO Auto-generated method stub
return rs.next();
}
}分页action类PageAction.java的关键代码如下:
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.lyt.struts.action;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.sql.DataSource;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import bean.*;
import common.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import dao.ApplicationDAO;
/**
* MyEclipse Struts
* Creation date: 07-14-2007
*
* XDoclet definition:
* @struts.action validate="true"
*/
public class PageAction extends Action {
/*
* Generated Methods
*/
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
ServletContext context = servlet.getServletContext();
//从配置文件中得到数据源
DataSource dataSource = (DataSource) context.getAttribute("db");
DB db = new DB(dataSource);
HttpSession session=request.getSession();
try{
request.setCharacterEncoding("gb2312");
}catch(Exception e){
e.printStackTrace();
}
UserBean user=(UserBean)session.getAttribute("usr");
if(user==null){
return mapping.findForward("invalidSession");
}
int staffId=user.getID();
String sappType=request.getParameter("appType");
int appType=Integer.valueOf(sappType).intValue();
ResultSet rs=ApplicationDAO.getBjsxRS(db, staffId, appType);
int pageNumber=1;
try {
pageNumber=Integer.parseInt(request.getParameter("pageNumber"));
} catch (Exception e) {
pageNumber=1;
}
PageableResultSet prs=null;
try{
prs=new PageableResultSet(rs);
}catch(Exception e){
e.printStackTrace();
}
prs.setPageSize(10);
prs.gotoPage(pageNumber);
ArrayList<Application> list =new ArrayList<Application>();
try {
for(int i=0; i<prs.getPageRowsCount(); i++) {
Application app=new Application();
list.add(app);
prs.next();
}
} catch (SQLException e) {
e.printStackTrace();
}
request.setAttribute("totalPage",prs.getPageCount());
request.setAttribute("currentPage",prs.getCurPage());
if(list.size()>0){
request.setAttribute("list", list);
}
db.close();
return mapping.findForward("page");
}
}显示分页的page.jsp代码如下:
<%@ page language="java" pageEncoding="gb2312"
contentType="text/html;charset=gb2312"%>
<%@ page import="bean.*,common.*"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>主页</title>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
<style type="text/css">
<!--
.style1 {color: #F4F4F4}
-->
</style>
</head>
<body>
<%
int currentPage = 1, totalPage = 0;
String sappType=(String)request.getAttribute("appType");
try {
currentPage = (Integer)request.getAttribute("currentPage");
} catch (Exception e) {}
try {
totalPage =(Integer)request.getAttribute("totalPage");
} catch (Exception e) {}
%>
<table>
<caption>
</caption>
<tr>
</tr>
<logic:present name="list" scope="request">
<logic:iterate id="shixiang" name="list">
<tr>
</tr>
</logic:iterate>
</logic:present>
</table>
<center>
<p>
第
<%=currentPage %>
页,共
<%=totalPage %>
页
<a href=/sky_6yt/page.do?pageNumber=1&&appType=<%=sappType %>>首页</a>
<%if(currentPage<=1){%>
上一页
<%}else{%>
<a href=/sky_6yt/page.do?pageNumber=<%=currentPage-1 %>&&appType=<%=sappType %>>上一页</a>
<%}%>
<%if(currentPage==totalPage){%>
下一页
<%}else{%>
<a href=/sky_6yt/page.do?pageNumber=<%=currentPage+1 %>&&appType=<%=sappType %>>下一页</a>
<%} %>
<a href=/sky_6yt/page.do?pageNumber=<%=totalPage %>&&appType=<%=sappType %>>末页</a>
</p>
</center>
</body>
</html>



1388

被折叠的 条评论
为什么被折叠?



