jsp中的分页问题

<% Collection c1=bookdb.getBooks();
Iterator it=c1.iterator();
%>
<table width="760" height="41" border="1">
<tr>
<td><div align="center">书名</div></td>
<td><div align="center">作者</div></td>
<td><div align="center">出版社</div></td>
<td><div align="center">价格</div></td>
<td><div align="center">购买</div></td>
</tr>
<% while(it.hasNext()){
BookBean book=(BookBean)it.next();
String title=book.getTitle();
String author=book.getAuthor();
String publish=book.getBookconcern();
Float price=book.getPrice();
int id=book.getId();

%>
<tr>
<td><%=title %></td>
<td><%=author %></td>
<td><%=publish %></td>
<td><%=price %></td>
<td><div align="center"><a href="catalog.jsp?add=<%=id %>">购买?</a></div></td>
</tr>
<%} %>

像用这种 迭代器 的 显示 记录时 怎么 分页啊

用结果集 分页比较简单 但这种 显示时候 怎么实现分页

我现在还不会用标签

还有 现在 想找一些能运行的专业点的jsp 源码 怎么找不到 网上下的好像都有错误

郁闷啊

纯JSP分页代码
这是从一个PHP分页代码改的,没有异常处理,也没有利用java面向对象的特点,仅能帮助了解分页的逻辑和页码处理,供参考。源码中带有mysql中的数据库,方便调试,请下载。
下面是TestPage.jsp

<%@ page contentType="text/html; charset=gb2312" %>
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<%
//驱动程序名,比较旧了,如果你用mysql5,自己改。
String driverName="org.gjt.mm.mysql.Driver";
String userName="root";//数据库用户名
String userPasswd="";//密码

String dbName="bookstore";//数据库名
String tableName="items"; //表名

//连接字符串
String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd;
Class.forName(driverName).newInstance();
Connection connection=DriverManager.getConnection(url);
Statement statement = connection.createStatement();

//每页显示记录数
int PageSize = 8;
int StartRow = 0; //开始显示记录的编号
int PageNo=0;//需要显示的页数
int CounterStart=0;//每页页码的初始值
int CounterEnd=0;//显示页码的最大值
int RecordCount=0;//总记录数;
int MaxPage=0;//总页数
int PrevStart=0;//前一页
int NextPage=0;//下一页
int LastRec=0;
int LastStartRecord=0;//最后一页开始显示记录的编号

//获取需要显示的页数,由用户提交
if(request.getParameter("PageNo")==null){ //如果为空,则表示第1页
if(StartRow == 0){
PageNo = StartRow + 1; //设定为1
}
}else{
PageNo = Integer.parseInt(request.getParameter("PageNo")); //获得用户提交的页数
StartRow = (PageNo - 1) * PageSize; //获得开始显示的记录编号
}

//因为显示页码的数量是动态变化的,假如总共有一百页,则不可能同时显示100个链接。而是根据当前的页数显示
//一定数量的页面链接

//设置显示页码的初始值!!
if(PageNo % PageSize == 0){
CounterStart = PageNo - (PageSize - 1);
}else{
CounterStart = PageNo - (PageNo % PageSize) + 1;
}

CounterEnd = CounterStart + (PageSize - 1);
%>

<html>
<head>
<title>分页显示记录</title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<%

//获取总记录数
ResultSet rs = statement.executeQuery("select count(*) from items" );
rs.next();
RecordCount = rs.getInt(1);

rs = statement.executeQuery("SELECT image_url,author,price,item_id FROM items ORDER BY item_id DESC LIMIT "
+StartRow+", "+PageSize);

//获取总页数
MaxPage = RecordCount % PageSize;
if(RecordCount % PageSize == 0){
MaxPage = RecordCount / PageSize;
}else{
MaxPage = RecordCount/PageSize+1;
}
%>
<body class="UsePageBg">
<table width="100%" border="0" class="InternalHeader">
<tr>
<td width="24%"><font size=4>分页显示记录</font></td>
<td width="76%">
<font size=4><%="总共"+RecordCount+"条记录 - 当前页:"+PageNo+"/"+MaxPage %></font>
</td>
</tr>
</table>

<br>
<table width="100%" border="0" class="NormalTableTwo">
<tr>
<td class="InternalHeader">记录序号</td>
<td class="InternalHeader" >图像路径</td>
<td class="InternalHeader" >作者</td>
<td class="InternalHeader" >价格</td>
<td class="InternalHeader" >图书编号</td>
</tr>

<%
int i = 1;
while (rs.next()) {
int bil = i + (PageNo-1)*PageSize;
%>
<tr>
<td class="NormalFieldTwo" ><%=bil %></td>
<td class="NormalFieldTwo" ><%=rs.getString(1)%></td>
<td class="NormalFieldTwo" ><%=rs.getString(2)%></td>
<td class="NormalFieldTwo" ><%=rs.getString(3)%></td>
<td class="NormalFieldTwo" ><%=rs.getString(4)%></td>
</tr>
<%
i++;
}%>
</table>
><br>
<table width="100%" border="0" class="InternalHeader">
<tr>
<td><div align="center">
<%
out.print("<font size=4>");
//显示第一页或者前一页的链接
//如果当前页不是第1页,则显示第一页和前一页的链接
if(PageNo != 1){
PrevStart = PageNo - 1;
out.print("<a href=TestPage.jsp?PageNo=1>第一页 </a>: ");
out.print("<a href=TestPage.jsp?PageNo="+PrevStart+">前一页</a>");
}
out.print("[");

//打印需要显示的页码
for(int c=CounterStart;c<=CounterEnd;c++){
if(c <MaxPage){
if(c == PageNo){
if(c %PageSize == 0){
out.print(c);
}else{
out.print(c+" ,");
}
}else if(c % PageSize == 0){
out.print("<a href=TestPage.jsp?PageNo="+c+">"+c+"</a>");
}else{
out.print("<a href=TestPage.jsp?PageNo="+c+">"+c+"</a> ,");
}
}else{
if(PageNo == MaxPage){
out.print(c);
break;
}else{
out.print("<a href=TestPage.jsp?PageNo="+c+">"+c+"</a>");
break;
}
}
}

out.print("]");;

if(PageNo < MaxPage){ //如果当前页不是最后一页,则显示下一页链接
NextPage = PageNo + 1;
out.print("<a href=TestPage.jsp?PageNo="+NextPage+">下一页</a>");
}

//同时如果当前页不是最后一页,要显示最后一页的链接
if(PageNo < MaxPage){
LastRec = RecordCount % PageSize;
if(LastRec == 0){
LastStartRecord = RecordCount - PageSize;
}
else{
LastStartRecord = RecordCount - LastRec;
}

out.print(":");
out.print("<a href=TestPage.jsp?PageNo="+MaxPage+">最后一页</a>");
}
out.print("</font>");
%>
</div>
</td>
</tr>
</table>
<%
rs.close();
statement.close();
connection.close();
%>
</body>
</html>

参考资料:http://hi.baidu.com/xiaoxiaolq/blog/item/80e8249b370328b6c8eaf47c.html

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-30
直接利用Vector数组里的下标来控制每页显示的行数和页数
第2个回答  2019-05-20
rs=sta.executeQuery("select
top"

+pageSize+"
*
from
usres
where
usrId
not
in(select
top"
+pageSize*(pageNow-1)+"
usrId
from
usres)");
首先不管你表名对不对的情况
你把你这段话打印出来看下。
你这段SQL应该是有问题的
select
top后面没有空格就直接加上pageSize了
你可以去数据库里面查下看
一:select
top10
*
from
usres;
二:select
top
10
*
from
usres;
第一句理论上应该是执行不通的。第二句才是正确的

如果你对SQL语句不是很熟的情况。最后每次执行把SQL语句打印出来。然后去数据库执行看看对不对
第3个回答  2008-03-16
由于你的迭代器是从集合对象Colletion来的,所以,集合的大小你可以知道。
<% Collection c1=bookdb.getBooks();
int size=c1.size();
Iterator it=c1.iterator();
//然后对size进行操作
%>
但最好的办法,同时也是提高查询效率的办法,就是在查询的时候就直接分块(即分页)查询,这样查询的结果就是要实现的结果,而不应该查出所有的结果,在从结果中用java语句分页。不知道你用的什么数据库,mysql 用的是limit,mssql用的是top,oracale用的是offest.
第4个回答  2008-03-17
此分页用的是结果集.不能用collection,建议用高效率的sql分页
select * from (select rownum rownum_s,字段from 表名 where rownum<=20) where rownum_s>1

查询的结果为20条数据.直接传递参数就可以实现分页.
1 : 定义变量
int intPageSize; //一页显示的记录数
int intRowCount; //记录总数
int intPageCount; //总页数
int intPage; //待显示页码

2: 循环设置
<%//设置一页显示的记录数
intPageSize = 25;
//取得待显示页码
strPage = request.getParameter("page");
//out.print("----"+strPage);

if(strPage==null){//表明在QueryString中没有page这一个参数,此时显示第一页数据
intPage = 1;
}
else{//将字符串转换成整型
intPage = Integer.parseInt(strPage);
if(intPage<1) intPage = 1;
}
rs.last();
intRowCount = rs.getRow();
//记算总页数
intPageCount = (intRowCount+intPageSize-1) / intPageSize;
//调整待显示的页码
if(intPage>intPageCount) intPage = intPageCount;

if(intPageCount>0)
{
//将记录指针定位到待显示页的第一条记录上
rs.absolute((intPage-1) * intPageSize + 1);
//显示数据
i = 0;
while(i<intPageSize && !rs.isAfterLast())
{
*********.你的循环部分.
rs.next();
i++;
}

%>

3:显示设置
<a href="***.jsp?page=1">第一页</a>
<%if(intPage>1){%><a href="***.jsp?page=<%=intPage-1%>">上一页</a><%}%>
<%if(intPage<intPageCount){%><a href="***.jsp?page=<%=intPage+1%>">下一页</a><%}%>
<a href="***.jsp?page=<%=intPageCount%>">最后一页</a>

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网