大家来把比较实用的分页JSP代码,javabean代码都贴出来,看谁的最实用?????

niyboy 2004-04-02 12:51:44
大家来把比较实用的分页JSP代码,javabean代码都贴出来,看谁的最实用?????

有的大家都贴出来,让大家一起学习

...全文
443 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnham 2004-09-23
  • 打赏
  • 举报
回复
mark
shiyonggang 2004-08-24
  • 打赏
  • 举报
回复
晕,这么快就揭帖啦,我还没贴分页标签呢,郁闷
efarer 2004-08-19
  • 打赏
  • 举报
回复
运用存储过程吧,通过数据库直接返回指定页的记录
schee 2004-08-18
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/2915/2915768.xml?temp=.6741907
fantasyding 2004-08-03
  • 打赏
  • 举报
回复
xqi8(星期八) ,你的那个转移到第几页似乎有点问题的啊
sevennight 2004-04-04
  • 打赏
  • 举报
回复
关注!
朋友别哭 2004-04-04
  • 打赏
  • 举报
回复
好1不错
收藏
xqi8 2004-04-04
  • 打赏
  • 举报
回复
jsp调用如下:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="java.sql.*, whc.skyline.*" %>
<%
/**
* Title: 分页jsp程序
* Description: 动态分页显示,只需向Pagi.class传入表名及where 查询条件即可

*/
%>
<%
String nowPage="";
String str_where="";//设置查询条件,默认值为空
String footer="";
String field_1="",field_2="",field_3="",field_4="";
%>
<jsp:useBean id="pagi" scope="page" class="whc.skyline.Pagi" />
<html>
<head></head>
<body>

<table width="70%" align='center'><tr></td><b>分页显示效果:</b></td></tr></table>
<table width=70% border='1' cellspacing='0' cellpadding='0' align='center' bordercolorlight='#000000' bordercolordark='#FFFFFF'>
<%
nowPage=request.getParameter("pages"); //获取地址栏传过来的pages参数
if (nowPage==null||nowPage.equals("null"))
nowPage="0"; //将当前页的具体页号置为0
pagi.setPages(5); //设置分页的每页条数
ResultSet rs = pagi.setQuerysql("a_test2","str_where","page.jsp",nowPage);
footer = pagi.PageFooter(); //读分页栏
//输出表头
out.print("<tr><td>序号</td><td>姓名</td><td>性别</td><td>邮箱</td></tr>");
try{
if (pagi.intPageCount>0)
{
int i=0;
while (rs.next())
{
i++;

if (i>((pagi.intPage-1)*pagi.intPageSize) &&(i<=pagi.intPage*pagi.intPageSize))
{
field_1=rs.getString(1)+"";
field_2=rs.getString(2)+"";
field_3=rs.getString(3)+"";
field_4=rs.getString(4)+"";
%>
<tr><td><%=field_1%></td><td><%=field_2%></td><td><%=field_3%></td><td><%=field_4%></td></tr>
<%
}//end if
} //end while
} //end if
rs.close();
} catch(Exception e)
{out.println(e.getMessage());}
finally
{pagi.closeConn();}
out.print("</table>");
out.println("<table border=0 width='70%' cellspacing='0' cellpadding='0' align='center' bordercolorlight='#000000' bordercolordark='#FFFFFF'><tr><td colspan=4 align=center>"+footer+"</td></tr>");
%>
</table>
</body>
</html>
xqi8 2004-04-04
  • 打赏
  • 举报
回复
package whc.skyline;
/**
* Title: 分页主程序

*/
import java.util.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import whc.skyline.*;

public class Pagi
{
ResultSet CountTopicrs=null; //初始化总记录数Rs变量
ResultSet Pagirs=null; //初始化分页时每页的记录集数Rs变量

private int intCountTopic=0; //主题总数,即select选出的、库中所有记录总数
public int intPageSize; //每页显示主题数,即每页显示的记录总数
public int intPageCount; //总页数
public int intPage=0; //当前页数
private String Countsql=null,Pagisql=null,str=null,str_where=null;
private String str_parameter="";
//public static int pages_n=1; //传分页参数值

private String nowPage; //初始化当前页intPage变量,以准确便获取当前页,即获取当前页的具体页号。
private String HttpFile; //当前的地址栏的文件,即具体jsp文件。

Linkdb db = new Linkdb();//连接数据库

//接收传分页参数
public void setPages(int n)
{
intPageSize = n;
}

/*功能:接收参数组织SQL语句
*str_table :分页显示的表名
*str_where:分页的where条件
*httpfile :具体jsp文件
*pages :获取地址栏传过来的pages参数
*/
public ResultSet setQuerysql(String str_table,String str_where, String httpfile,String pages)throws SQLException
{
ResultSet r=null;
this.nowPage=pages;
this.HttpFile=httpfile;//分页文件名
Countsql="select count(*) from "+str_table+" "+str_where;
Pagisql="select * from "+str_table+" "+str_where;
try{
r=querySql(Countsql,Pagisql);
}catch(SQLException _ex)
{System.out.println(_ex);}
return r;
}

/*功能:接收参数进行首尾页判断
*Countsql:总记录的Query字符串。[形式为select count(*) from tablename]
*Pagisql :要分页的Query字符串。[形式为select * from tablename where ...]
*request :参数传递过程中的变量。[用来控制翻页时的pages变量]
*/
public ResultSet querySql(String Countsql,String Pagisql)//,HttpServletRequest request
throws SQLException{
//获取当前文件名。
//HttpFile=request.getRequestURI();
//获取当前页,将数值赋予intPage变量。[分页栏中必须要有pages参数]
//nowPage=request.getParameter("pages");//由参数HttpServletRequest request传递而来

if (nowPage==null)
{ intPage=1; }
else
{
intPage=Integer.parseInt(nowPage);
if (intPage<1)
intPage=1;
}//end else

//获取总记录数的结果集。
CountTopicrs=db.executeQuery(Countsql);
if (CountTopicrs.next())
{
intCountTopic=CountTopicrs.getInt(1); //获取第一个字段的整型
}
//获取总页数。
intPageCount = (intCountTopic+intPageSize-1)/intPageSize;
//如果当前页大于总页数,则当前页等于总页数。//=最后一页
if (intPage>intPageCount)
{
intPage=intPageCount;
}
//关闭总主题数的数据集。
CountTopicrs.close();

//获取执行分页的结果集。
Pagirs=db.executeQuery(Pagisql);
return Pagirs;
}//end querySql function.

//获取记录总数。
public int getCountTopic()
{
return intCountTopic;
}

//获取总页数。
public int getPageCount()
{
return intPageCount;
}

//获取当前页数。
public int getIntPage()
{
return intPage;
}

//获取当前页的数据。boodata为True,表示要加入该数据到当前页。
//这里可能会在JSP调用时影响速度[因为调用时要多一层循环],因此放到JSP中嵌入,待改进。
//该代码暂时保留。
// public boolean getData(){
// boolean boodata=false;
// if (intPageCount>0)
// {
// try
// {
// while (Pagirs.next())
// {
// i++;
/// if (i>((intPage-1)*intPageSize) &&(i<=intPage*intPageSize))
// {
// boodata=true;
// }
// } //endwhile.
// }//end try.
// catch(Exception e){
// System.out.println(e.toString());
// }
// } //endif.
// return boodata;
// } //end getData();

//设置分页参数
public void setPfoot(String str)
{
this.str_parameter+=str;
}

//分页栏函数。
public String PageFooter() {
String str = "";
int next, prev;
prev=intPage-1;
next=intPage+1;
str +="<font style='font-size: 9pt'>总计<font color='red'>"+getCountTopic()+"</font>条记录,"+"【共<font color='red'>"+getPageCount()+"</font>页】";
str +="【条"+intPageSize+"/页】 当前第<font color='red'>"+getIntPage()+"</font>页(列出第"+((intPageSize*getIntPage()+1)-intPageSize)+"到第"+(getIntPage()*intPageSize)+"条)     ";//getIntPage()*intPageSize
if(intPage>1)
str += " <A href=" + HttpFile + "?pages=1"+str_parameter+">第一页</A> ";
else str += " 第一页 ";

if(intPage>1)
str += " <A href=" + HttpFile + "?pages=" + prev +str_parameter+ ">上一页</A> ";
else str += " 上一页 ";

if(intPage<intPageCount)
str += " <A href=" + HttpFile + "?pages=" + next +str_parameter+ ">下一页</A> ";
else str += " 下一页 ";

if(intPageCount>1&&intPage!=intPageCount)
str += " <A href=" + HttpFile + "?pages=" + intPageCount +str_parameter+ ">最后页</A>";
else str += " 最后页 </font>";
str +=" 转到<INPUT TYPE='text'NAME='go' size='2'>页 <input type='submit' name='Submit' value='go'>";
return str;
}
//关闭数据库连接
public void closeConn()
{
db.closeStmt();
db.closeConn();
}

} //end.




连接数据库
package whc.skyline;

import java.sql.*;
/**
* Title: 数据库底层连接
* Description:
* Copyright: Copyright (c) 2002
* Company:
* @author skyline
* @version 1.0
*/
public class Linkdb {
String strDriver="sun.jdbc.odbc.JdbcOdbcDriver";//加载驱动程序
String strConn="jdbc:odbc:dbserver";
private Connection conn = null;
private Statement stmt = null; //执行SQL语句
ResultSet rs = null;

public Linkdb()
{
try
{
Class.forName(strDriver).newInstance(); //**newInstance()什么意思?**//
} catch (Exception e) {
System.err.println("不能连接数据库!"+e.getMessage());
}
}

//执行Select语句
public ResultSet executeQuery(String sql) {
try {
conn = DriverManager.getConnection(strConn,"sa","sa"); //建立与数据源之间的连接
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql); //反回结果集
}catch(SQLException ex) {
System.err.println("执行SQL语句出错:" + ex.getMessage());
}
return rs;
}

//执行Insert,Update语句
public void executeUpdate(String sql) {
try {
conn = DriverManager.getConnection(strConn,"sa","sa");
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);//分页必加参数
stmt.executeQuery(sql);
stmt.close();
conn.close();
}
catch(SQLException ex) {
System.err.println("执行SQL语句出错: " + ex.getMessage());
}
}

public void closeStmt(){
try{
stmt.close();
}
catch(SQLException e){
e.printStackTrace();
}
}

public void closeConn(){
try{
conn.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
}


xgy_p 2004-04-04
  • 打赏
  • 举报
回复
说到底其实只有几种方法而已,从这几种方法着手就可以了。
1、最蠢的,打开整个记录集,然后用ResultSet的absolute方法之类的移到相应的记录,再next之类的。
2、最实用的。写一个bean,判断每页所需的记录的范围,再从数据库中取出一部分记录。如用mysql的limit语句,如select * from XXtable limit 100,10之类的。
3、如果记录数不是太多,更新也不多,而select的用户非常多。干脆可以把记录集整个放到一个全局变量的ArrayList中。在JSP中用<%! %>定义的。到隔一段时间再更新这个ArrayList。这样需要的东西全部在内存中,速度会非常快。限制是如果记录集很多而且记录数也多,内存很容易就爆了。
gaurence 2004-04-04
  • 打赏
  • 举报
回复
不错!顶!!!!!!!!!!!!
zengjin83 2004-04-03
  • 打赏
  • 举报
回复
我觉得实用的不一定复杂!!
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("gb2312");
sevennight 2004-04-03
  • 打赏
  • 举报
回复
好贴!!!
共同学习,中国的软件才会有发展!
betterjonah 2004-04-03
  • 打赏
  • 举报
回复
我认为从tag入手吧。
zj2977(大地)分析比较全面了。
至于怎么实现,看你的侧重点了。
分页代码,要通用,困难比较大
niyboy 2004-04-03
  • 打赏
  • 举报
回复
up
hnny 2004-04-03
  • 打赏
  • 举报
回复
package com.companyname.util;

public class Pagecontrol {
private int rowCount=1; //总记录数
private int pageSize=15; //每页显示的记录数
private int showPage=1; //欲显示的页码
private int pageCount=1; //记录分页的总页数
private String requestUrl=""; //响应的请求url
private String charSkip="     ";//分页间隔空格
private StringBuffer pageInfo=new StringBuffer();//显示的分页记录信息

public void setRowCount(int n){
rowCount=n;
pageCount=(rowCount%pageSize)==0?(rowCount/pageSize):(rowCount/pageSize+1);
}
public int getRowCount(){
return rowCount;
}

public void setPageSize(int n){
pageSize=n;
}
public int getPageSize(){
return pageSize;
}

public void setShowPage(int n){
showPage=n;
}
public int getShowPage(){
return showPage;
}

public int getPageCount(){
return pageCount;
}

public void setRequestUrl(String n){
requestUrl=n;
}
public String getRequestUrl(){
return requestUrl;
}

/* 在页面中动态显示分页信息,包括上下页、跳转页 */
public StringBuffer getPageInfo(){
pageInfo.append("<table border='0' cellpadding='0' cellspacing='0' width='98%'>");
pageInfo.append("<tr>");

//记录及页码信息
pageInfo.append("<td align='left'>");
pageInfo.append("共有记录:<b>"+rowCount+"</b>条"+charSkip);
pageInfo.append("每页显示:<b>"+pageSize+"</b>条"+charSkip);
pageInfo.append("当前页面:<b>"+showPage+"/"+pageCount+"</b>"+charSkip);
pageInfo.append("</td>");

//上下页分页页码显示
pageInfo.append("<td align='right'>");
if(showPage>1){
pageInfo.append("<a href='"+requestUrl+"1'>首页</a>"+charSkip);
pageInfo.append("<a href='"+requestUrl+(showPage-1)+"'>上一页</a>"+charSkip);
}
else{
pageInfo.append("首页"+charSkip);
pageInfo.append("上一页"+charSkip);
}

if(showPage<pageCount){
pageInfo.append("<a href='"+requestUrl+(showPage+1)+"'>下一页</a>"+charSkip);
pageInfo.append("<a href='"+requestUrl+pageCount+"'>末页</a>"+charSkip);
}
else{
pageInfo.append("下一页"+charSkip);
pageInfo.append("末页"+charSkip);
}
pageInfo.append(charSkip);

//下拉列表分页显示
pageInfo.append("转向第<select name='showpage' size='1' onChange='document.forms[0].submit();'>");
for (int j=1;j<=pageCount;j++){
pageInfo.append("<option value='"+j+"'");
if(j==showPage){
pageInfo.append(" selected");
}
pageInfo.append(">"+j);
pageInfo.append("</option>");
}
pageInfo.append("</select>页");
pageInfo.append("</td></tr>");
pageInfo.append("</table>");
return pageInfo;
}
}
caiyanying732 2004-04-03
  • 打赏
  • 举报
回复
学习
天涯柳絮 2004-04-03
  • 打赏
  • 举报
回复
UP
locust2002 2004-04-03
  • 打赏
  • 举报
回复
up
hai1860 2004-04-03
  • 打赏
  • 举报
回复
我强烈的支持!!!!!!!!!!!
都是好帖子啊啊!!
加载更多回复(19)

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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