很多初學者在做jsp網頁的時候都會遇到一個很蛋疼的問題,就是網頁的分頁。
遇到這種問題就像要去網上找第三方插件,但是找了半天還是沒找到,或者找到了但是又不會用。
我也是這樣,後來我就決定自己寫一個分頁的功能。經過幾番努力,終於做了一個簡單的分頁。
這個方法只適用於數據較少的情況,如果數據很多,可能很慢,這樣好像要用異步加載的方法吧。
最底部 有圖有真相:
1、首先你要在數據庫的操作類中寫一個分頁查詢的方法根據不同的數據表,方法會有所不同。代碼如下:
/*
* 分頁查詢
*/
public List<Work> pageQuery(int currentPage, int pageSize) {
String sql = "select * from work";
List<Work> list = new ArrayList<Work>();
int beginrow = pageSize * (currentPage - 1);// 開始的位置
int endrow = currentPage * pageSize;// 終止的位置
int currentNum = 0;// 經歷的行數
try {
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
if (currentNum >= beginrow && currentNum < endrow) {
Work work = new Work();
work.setID(rs.getInt(1));
work.setWork_title(rs.getString(2));
work.setWork_content(rs.getString(3));
work.setStart_date(rs.getString(4));
work.setEnd_date(rs.getString(5));
list.add(work);
if (currentNum == endrow - 1) {
break;
}
}
currentNum++;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
2、在數據庫操作類中寫一個獲取分頁總數的方法。
/*
* 查詢數據庫獲得中的頁數
*/
public int getPageSize(int count){//獲取總的頁數
int total = 0;
String sql = "select count(*) from student";
try{
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if(rs.next()){
int records = rs.getInt(1);
if(records%count==0){
total = records / count;
}else{
total = records / count + 1;
}
}
}catch(Exception ex){
ex.printStackTrace();
}
return total;
}
3、寫一個分頁的邏輯類。
package com.web.page;
import java.sql.SQLException;
import java.util.List;
import com.web.dbDAO.WorkDAO;
import com.web.dbTable.Work;
public class PageInfo {
private int total;//總頁數
private int curpage;//當前頁
private int count;//每頁顯示記錄數
private List<Work> list;//接受數據庫操作的方法返回的數組
private WorkDAO workdao;//實例化數據庫操作的類
public List<Work> getList(){
list = workdao.pageQuery(curpage,count);//開始進行分頁
return list;
}
public PageInfo(int curpage){
this.curpage = curpage;
try {
workdao = new WorkDAO();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void setTotal(){
this.total = workdao.getPageSize(count);//得到總的頁數
}
public int getTotal(){
return this.total;
}
public void setCurpage(int curpage){
this.curpage = curpage;
}
public int getCurpage(){
return this.curpage;
}
public void setCount(int count){
this.count = count;
}
public int getCount(){
return this.count;
}
}
4、jsp代碼頁面。
int currentPage = 1;//開始默認第一頁
String c = request.getParameter("currentPage");//獲取當前頁
if (c != null && !c.equals("")) {
currentPage = Integer.parseInt(c);
}
PageInfo infos = new PageInfo(currentPage);
infos.setCurpage(currentPage);
infos.setCount(2);//每一頁顯示的頁數
infos.setTotal();
List<Work> wlist = infos.getList();
<table class="homework_table" cellspacing="0" cellpadding="0">
<tr>
<th style="width:200px">作業標題</th>
<th>起始時間</th>
<th>截止時間</th>
<th>查看</th>
<th>提交</th>
</tr>
<%
for (Work work : wlist) {
%>
<tr>
<td><%=work.getWork_title()%></td>
<td><%=work.getStart_date()%></td>
<td><%=work.getEnd_date()%></td>
<td><a
href="WebPage/jsp/person2.jsp?content=<%=work.getWork_content()%>">查看</a>
</td>
<td class="file_submit">提交</td>
</tr>
<%
}
%>
<tr>
<td colspan="5" align="center"><a
href="WebPage/jsp/person.jsp?currentPage=1">首頁</a>
<%
int counts = infos.getTotal();
for (int i = 0; i < counts; i++) {
%>
<a href="WebPage/jsp/person.jsp?currentPage=<%=i + 1%>"><%=i + 1%></a>
<%}%>
<%
int countes = infos.getTotal();
%>
<a href="WebPage/jsp/person.jsp?currentPage=<%=countes%>">尾頁</a></td>
</tr>
</table>
以上代碼經過測試,完美運行