关于实现JSP分页的JAVABEAN

james1219 2005-04-19 06:48:12
各位前辈,偶在学习STRUCTS,希望能够学习到如何实现一个能够高效分页的JAVABEAN或更好的途径
偶的想法是在JSP页面传递一个PAGE和数据COLLECTION,返回控制页面的各个方法,属性。。。

请前辈们指导!

学习中
...全文
204 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sensory 2005-06-06
  • 打赏
  • 举报
回复
mark
toto2004 2005-04-29
  • 打赏
  • 举报
回复
hongyan2004(spring+hibernate) 的这个方法是好啊,但是怎么用的啊能否给个简单的使用的列子啊:)
moylaugh 2005-04-29
  • 打赏
  • 举报
回复
to hongyan2004(spring+hibernate) :
不赞成你把显示逻辑跟分页本身的逻辑揉杂在一起,不易看,也不易改,更不易重用

我的做法是这样的:

/*
* PagingQuery.java
*/

import java.util.List;

// 该接口提供给PagingManager类使用
// 主要职责:从一个数据集合中提取所需范围的数据
// 数据集合可以是数据库,文件,内存数据集合等等
public interface PagingQuery {

List getItems(int start, int quantity) throws PagingException;

int numberOfItems() throws PagingException;

}


/*
* PageManager.java
*/

import java.util.List;
import java.util.ArrayList;

// 该类管理分页显示数据的逻辑
public class PagingManager {

private PagingQuery query;

private int pageSize = 20; // 默认的每页记录数

public PagingManager() {
}

public PagingManager(PagingQuery query) {
this.query = query;
}

// 取得某一页的数据
// pageNumber表示第几页,若pageNumber超出范围,返回一个空的List
// 若取数据过程中出错,抛出PagingException
public List getPage(int pageNumber) throws PagingException {
if (pageNumber < 1) {
return new ArrayList(0);
}

// 计算该页第一条记录的序号
// 在所有的数据中,第一条数据的序号为1
int start = pageSize * (pageNumber - 1) + 1;
return query.getItems(start, pageSize);
}

// 设置每页数据的数量
// 范围限制:1 <= pageSize <= 500
// 超出该范围则保持原值不变
public void setPageSize(int pageSize) {
if (pageSize < 1 || pageSize > 500) {
return;
}
this.pageSize = pageSize;
}

// 获得每页数据的数量
public int getPageSize() {
return pageSize;
}

// 获得本类数据的总数
public int numberOfItems() throws PagingException {
return query.numberOfItems();
}

// 获得本类数据的总页数
public int numberOfPages(int numberOfItems) throws PagingException {
if (numberOfItems <= 0)
return 0;
return (numberOfItems + pageSize - 1) / pageSize;
}

// 获得本类数据的总页数
public int numberOfPages() throws PagingException {
return (numberOfItems() + pageSize - 1) / pageSize;
}

public void setPagingQuery(PagingQuery query) {
this.query = query;
}
}


使用的时候,要先写你自己的query类实现PagingQuery接口,比如MyQuery,然后
PagingManager pm = new PagingManager(new MyQuery());
在页面上只要使用pm,即可达到你的分页要求,当然这个pm对象要存在server端的,一般是存在session里面
james1219 2005-04-19
  • 打赏
  • 举报
回复
多谢楼上的2位前辈,偶正在学习,不知道在工作中都是这样实现吗?
hongyan2004 2005-04-19
  • 打赏
  • 举报
回复
/*主要方法如下:
* public void setRows(int rows) 功能:设置每页显示的条目数,默认是10
* in: 预在每叶中显示的条目数
* public ResultSet getPageSet(ResultSet rs, HttpServletRequest request) 功能:获得当前要显示页的记录集
* in:(1)你执行sql查询语句后返回的记录集;(2)jsp的request对象
* out:返回你要查询的页面的记录集(你可以直接用它的next方法显示出你要查询的页面)
* public void pageLink( JspWriter o ,String fileName) 功能:输出表格下面的页号连接(功能有限, 有待改进)
* in:(1) jsp的out对象;(2)你写的要查看数据的jsp页面名字(如"view.jsp")
*/
package bean;
import javax.servlet.jsp.JspWriter;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.math.*;
import java.io.IOException;

public class PageView {
JspWriter out;//输出对象
private String strPage = null;// page参数变量
private int curPage;//当前要显示的页号
private int m_rows; // 设置每页显示的页数
private int pages;// 总页数
private int resultCounts;//记录集总条数
private String curPageStr;//当前要显示的页号的字符串表示
private int page_start;//起始页面号
private int page_end;//中止页面号
public PageView() {
m_rows=10;//默认每页显示10条
}
// 设置每页要显示的记录数
public void setRows(int rows){
m_rows=rows;
}
// 取得总页数
private int getPages(int r){
pages=(r+m_rows-1)/m_rows;
return pages;// 返回页数
}
//外部方法,参数是查询返回的记录集和jsp的request 对象
public ResultSet getPageSet(ResultSet rs, HttpServletRequest request)
{
try{rs.last();
resultCounts = rs.getRow();//得到记录集总条数
rs.first();
}catch(SQLException e){
System.out.print(e.getMessage());
}
pages=getPages(resultCounts);//得到总页数

String strPage=null;
try{
strPage = request.getParameter("page");// request对象取得page的值
}
catch(Exception e){
System.out.println("delcolumn"+e.getMessage());
}
try{
if(strPage == null){// 默认没有就设置是第一页
curPage = 1;
}
else{
curPage = Integer.parseInt(strPage);// 取得strPage的整数值
if(curPage< 1)// 如果小于1,同样返回是第一页
curPage = 1;
}
}
catch(Exception e){
System.out.print("curPages");
}

if(curPage==1){
return rs;// 如果是第一页的话,就直接返回
}
else{
int i=1;
try{
while(rs.next()){
i=i+1;
if(i>((curPage-1)*m_rows))
break;// 退出
}
return rs;// 从退出开始将结果集返回
}
catch(Exception e){
System.out.print(e.getMessage());
}
}
return rs;
}




///////////////输出页号连接 fileName是显示数据的文件名
public void pageLink( JspWriter o ,String fileName) throws IOException {
out=o;
String pagesStr;
pagesStr=Integer.toString(pages);
int temp=curPage;
try{
curPageStr=Integer.toString(temp);
String nPage=Integer.toString(temp+1);
String pPage=Integer.toString(temp-1);
out.print("<form name='form_page' method='get' action='"+fileName+"'>");
out.print("<center>页次:"+curPageStr+"/"+pagesStr+"页");
out.print("   ");
out.print("每页"+m_rows+"条记录");
out.print("   ");
out.print("总共"+resultCounts+"条记录");
out.print("   ");
out.print("<a href='" + fileName + "?page=1'><img border=0 src='images/go_top.gif' width='9' height='8'></a>");
out.print("   ");
if(curPage>1)
{

curPageStr=Integer.toString(temp);

out.print("<a style='text-decoration:none ' href='" + fileName + "?page=" + pPage+"'><img border=0 src='images/go_up.gif' width='9' height='8'></a>");
}
for (int n=-2;n<=2;n++)
{
if ((curPage+n)>0&(curPage+n)<=pages)
{if (n==0)
{out.print("<a href='"+fileName+"?page="+(curPage+n)+"'><font color='#FF0000'>["+(curPage+n)+"]</font></a>");
}
else
{
out.print("<a href='"+fileName+"?page="+(curPage+n)+"'>["+(curPage+n)+"]</a>");
}
}
}

if(curPage<pages)
{

curPageStr=Integer.toString(temp);
out.print("<a style='text-decoration:none ' href='" + fileName + "?page=" + nPage +"'><img border=0 src='images/go_down.gif' width='9' height='8'></a>");
out.print("   ");
out.print("<a style='text-decoration:none ' href='" + fileName + "?page="+pagesStr+"'><img border=0 src='images/go_bottom.gif' width='9' height='8'></a>");

}
out.print("   转到第");

out.print( "<select name='page' onChange='form_page.submit()'>");
for (int m=1;m<=pages ;m++ )
{
out.print("<option value="+m);
if (m==curPage)
{
out.print(" selected");
}

out.print(">"+m+"</option>");
}


out.print("</select>页</form>");
out.print("</center>");
}
catch(Exception e){
System.out.print(e.getMessage());
}
}
}
wobuhuiyouyong 2005-04-19
  • 打赏
  • 举报
回复
package com.jspdev.pagination;
import java.util.Vector;
public class PageBean
{
public int curPage ; //当前是第几页
public int maxPage ; //一共有多少页
public int maxRowCount ; //一共有多少行
public int rowsPerPage=10 ;//每页多少行
public java.util.Vector data;
public PageBean()
{
}
public void countMaxPage() { //根据总行数计算总页数
if (this.maxRowCount % this.rowsPerPage==0){
this.maxPage = this.maxRowCount/this.rowsPerPage;
}else{
this.maxPage = this.maxRowCount/this.rowsPerPage + 1;
}
}
public Vector getResult()
{
return this.data;
}

public PageBean(ContactBean contact)throws Exception
{
this.maxRowCount = contact.getAvailableCount(); //得到总行数
this.data = contact.getResult(); //得到要显示于本页的数据
this.countMaxPage();
}
} //计算总页数


67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧