JSP分页心得-粗陋版

来源:互联网 发布:大公资信知乎 编辑:程序博客网 时间:2024/06/05 15:46
之前做过ASP分页,当初接触,思路基本上按书(ASP网络技术,有书的朋友可以去看看)上写,后来写JSP分页时,感觉那书上写的那个程序不太好.

先讲讲思路吧:
1.取得当得要分页表的记录数,这里变量设为int total;(懂SQL的语句应该对select count(*) as total from table 不陌生吧,ASP也有个方法可以取到,哈,好久没用,忘记了.)

2.设置页面记录数,变量为int pageSize = 10;(声明一下,ASP可以直接对rs.pagesize进行设置,JSP我找不到相关方法)

3.由前两步得到总页数,变量为tpage = (int)Math.ceil((double)total/pageSize);

4.设置一个变量为cpage来表示当前页面,初值?随便啦,不是0就是1,反正以后也不判断.

5.利用rs.absolute(int)方法来跳转记录.rs.absolute((cpage-1)*pageSize);
给你们思考一下为什么要cpage-1哦.之前没想好,犯的小错误.

6.加个变量boolean check 来检测当前的记录是否为空.默认为false.

样本程序:
Statement stm = DBcon.createStatement( );
ResultSet rs= null;
String listSql = "select count(*) AS total from news";
rs = stm.executeQuery(listSql);
int total=0;
int tage=0;
int cpage=0;
if(request.getParameter("page")!=""&&request.getParameter("page")!=null)
cpage = Integer.parseInt(request.getParameter("page"));

int pageSize=10;
boolean check = false;
if(rs.next()){
//记算总的记录条数
total = rs.getInt("total"); //得到total方法还有很多种.这个只是我想到方法之一.
// 设置总页数
tPage = (int)Math.ceil((double)total/pageSize);
check= true;
}
if(cpage>tPage) cpage =tPage;
if(cpage<1) cpage =1;
if (!check) {
out.print("没有记录!");
}
else{
rs = stm.executeQuery("select * from news order by id desc");
if((cpage-1)*pageSize<total&&cpage!=1){
rs.absolute((cpage-1)*pageSize);//下一页
}
int i =0;
while(rs.next()&&i<pageSize){
i++;
//要显示字段内容
}
}

叹...基本上完成了...说一下,把上面的while改成
for(int i=0;i<pageSize;i++){
if(rs.next()){
//要显示字段内容
}
else break;
}好像会出错,原因不明,帮忙查一下原因,难道写错了?
----------------------------------------------------------------------------------------
//完整程序
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file ="adminconn.jsp" %>
<%@ page import="java.sql.*"%>
<html>
<head>
<LINK href="../css.css" type=text/css rel=stylesheet>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>管理新闻</title>
<script language="JavaScript">
function delete_confirm() {
if (event.srcElement.outerText=="删除")
event.returnValue=confirm("您确认执行删除操作?");
}
</script>

</head>

<body >
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td>&nbsp;</td>
</tr>
</table>
<table width="95%" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#000000">
<tr>
<td width="5%" height="25" align="center" bgcolor="#CCCCCC">编号</td>
<td width="25%" align="center" bgcolor="#CCCCCC">新闻标题</td>
<td width="10%" align="center" bgcolor="#CCCCCC">发布者</td>
<td width="15%" align="center" bgcolor="#CCCCCC">所属分类</td>
<td width="9%" align="center" bgcolor="#CCCCCC">是否置顶</td>
<td width="15%" align="center" bgcolor="#CCCCCC">发布日期</td>
<td width="10%" align="center" bgcolor="#CCCCCC">操作</td>
</tr>
<%

Statement stm = DBcon.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs= null;
String listSql = "select count(*) AS total from news";
rs = stm.executeQuery(listSql);
int total=0;
int tPage=0;
//int cPage=0;
int page1=0;

if(request.getParameter("page1")!=""&&request.getParameter("page1")!=null)
page1 = Integer.parseInt(request.getParameter("page1"));

int pageSize=10;
boolean check = false;
if(rs.next()){
//记算总的记录条数
total = rs.getInt("total");
// 设置总页数
tPage = (int)Math.ceil((double)total/pageSize);
check= true;
}
if(page1>tPage) page1 =tPage;
if(page1<1) page1 =1;
if (!check) {
out.print("没有记录!");
}
else{
rs = stm.executeQuery("select * from news order by id desc");
//out.print(page1*pageSize+"<br>");
//out.print(total);
if((page1-1)*pageSize<total&&page1!=1){
//out.print(page1*pageSize);
rs.absolute((page1-1)*pageSize);//下一页
}
int i =0;
while(rs.next()&&i<pageSize){
i++;

%>
<tr bgcolor="#FFFFFF">
<td height="22" align="center"><%=rs.getInt("id")%></td>
<td> 
<%="<img src='../image/icon.jpg' border=0 alt='新闻'>"%>
<a href="listone.jsp?id=<%=rs.getInt("id")%>" target="_blank" title="<%=rs.getString("title")%>"><%=rs.getString("title")%></a></td>
<td align="center"><%=rs.getString("author")%></td>


<% if(rs.getString("mainclass").equals("1")){
//out.print("<td align='center'>通知公告</td>");
%>
<td align="center">通知公告</td>
<%
}
if(rs.getString("mainclass").equals("2")){%>
<td align="center">最新动态</td>

<% //out.print("<td align='center'>最新动态</td>");
}%>

<td align="center"><%if(rs.getBoolean("tops"))
out.print("是");else out.print("否");%></td>
<td align="center"><%=rs.getDate("addtime")%></td>
<td align="center"><a href="admin_mod.jsp?id=<%=rs.getInt("id")%>">修改</a> <a href="admin_del.jsp?id=<%=rs.getInt("id")%>" onclick= delete_confirm()>删除</a></td>
</tr>
<%


}//end while


%>
</table>

<table width="95%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td>&nbsp;</td>
</tr>
<tr bgcolor="#FFFFFF">
<form method="get" action="admin_list.jsp" >
<td height="30" align="center">
<%if (page1<2)
out.print("首页 上一页&nbsp") ;
else{
out.print("<a href=admin_list.jsp?page1=1>首页</a>&nbsp");
out.print ("<a href=admin_list.jsp?page1="+(page1-1)+">上一页</a>&nbsp");
}
if (tPage-page1<1 )
out.print ( "下一页 尾页");
else{
out.print("<a href=admin_list.jsp?page1=" + (page1+1) + ">") ;
out.print( "下一页</a> <a href=admin_list.jsp?page1="+tPage+">尾页</a>");
}
out.print("&nbsp;页次:<strong><font color=red>"+page1+"</font>/"+tPage+"</strong>页 ");
out.print("&nbsp;共<b><font color='#FF0000'>"+total+"</font></b>条记录 <b>"+pageSize+"</b>条记录/页");
out.print(" 转到:<input type='text' name='page1' size=4 maxlength=10 class=input value="+page1+">");
out.print(" <input class=input type='submit' value=' Go ' name='cndok'></span></p>" );
%>
</td></form>
</tr>
</table>
<%
//end if
}
rs.close();
stm.close();
DBcon.close();
%>

</body>
</html> 
原创粉丝点击