分頁核心類別:PageCt.java
package vod;
import java.sql.*;
import java.util.*;
public class PageCt {
private long l_start; // 起始筆數
private long l_end; // 結束筆數
private long l_curpage; // 目前頁碼
private long l_totalnum; // 總筆數
private int int_num = 5; // 每頁筆數
private long l_totalpage; // 總頁數
public void Init(long currentpage, long totalnum) {
l_curpage = currentpage;
l_totalnum = totalnum;
if (currentpage >= 0) {
if (currentpage >= (long)Math.ceil((double)l_totalnum / (double)int_num))
l_curpage = (long)Math.floor((double)l_totalnum / (double)int_num);
else
l_curpage = currentpage;
} else {
l_curpage = 0;
}
l_start = l_curpage * int_num;
l_end = l_start + int_num;
if (l_end > l_totalnum) l_end = l_totalnum;
l_totalpage = (long)Math.ceil((double)l_totalnum / (double)int_num);
}
// Getter 方法群
public long getCurpage() { return l_curpage; }
public long getPrepage() { return (l_curpage - 1 >= 0) ? l_curpage - 1 : 0; }
public long getNextpage() { return (l_curpage + 1 <= l_totalpage) ? l_curpage + 1 : l_totalpage; }
public long getTotalnum() { return l_totalnum; }
public long getTotalpage() { return l_totalpage; }
public long getStart() { return l_start; }
public long getEnd() { return l_end; }
}
JSP 前端整合範例
<%@ page import="java.sql.*" contentType="text/html;charset=gb2312" %>
<jsp:useBean id="PageCount" scope="page" class="kstest.PageCt" />
<jsp:useBean id="sqlbean" scope="page" class="vod.sql_data" />
<html><head><TITLE>測試分頁</TITLE></head><body>
<%
ResultSet rs0 = sqlbean.executeQuery("select count(*) from UserList");
rs0.next();
long data_num = rs0.getLong(1);
long currentPage = 0;
String cp = request.getParameter("currentpage");
if (cp != null && !cp.equals("")) currentPage = Integer.parseInt(cp);
String qp = request.getParameter("Query_Page");
if (qp != null && !qp.equals("")) currentPage = Integer.parseInt(qp) - 1;
PageCount.Init(currentPage, data_num);
long start = PageCount.getStart();
long end = PageCount.getEnd();
ResultSet rs = sqlbean.executeQuery("select * from UserList");
long i = 0;
while (i < start && rs.next()) i++;
while (rs.next() && i < end) {
// 輸出資料列...
i++;
}
%>
<table width=600>
<tr bgcolor=#b5dbff>
<form method=GET action=index.jsp>
<td>共 <%=PageCount.getTotalnum()%> 條</td>
<td><%=PageCount.getCurpage()+1%>/<%=PageCount.getTotalpage()%> 頁</td>
<td>查看第 <input type=text name=Query_Page size=3> 頁</td>
<td><a href="index.jsp?currentpage=<%=PageCount.getPrepage()%>">上頁</a></td>
<td><a href="index.jsp?currentpage=<%=PageCount.getNextpage()%>">下頁</a></td>
</form></tr></table>
</body></html>
設計重點
- 封裝分頁邏輯於 JavaBean,JSP 僅負責顯示
- 支援頁碼跳轉、上下頁導航、直接輸入頁碼
- 自動處理邊界條件 (首頁、尾頁、空資料)
- 每頁筆數可透過
int_num 參數調整