jsp分页
一、分页
对多条的信息我们一般要分页展示信息。
二、思想及操作
本文的分页,主要是基于以下思想:
1.选择 上一页,下一页等分页操作,改变只是要展示的页码
2.到数据库从的信息,只取当前页要展示的信息
基于以上思想,我们分页只要做到:
根据 提供的页码 ,给定到数据库中取的信息的开始行的行号和每页要展示的条数即可
三、简单封装的分页代码
package com.linys.util;
/**
* 分页的简单封装
* 主要是为要分页的信息计算总页数和为要展示的某一页提供开始信息行的行号
* 使用:
* 1.PageUtil pageUtil=new PageUtil(totalRecords);
* 需给出totalRecords:即要展示的信息的总条数
* 2.int startRow=pageUtil.getStartRow(pageNo);
* 需给出pageNo即当前要展示的页数
* 3.根据startRow和PAGE_SIZE,可以到数据库取相应的信息了
*
* jsp页面:
* 一、取信息:
* 1.String strPageNo = request.getParameter("pageNo");
* 2.int totalRecords=DB取对应信息的总条数,如
* Connection conn = DB.getConn();
Statement stmtCount = DB.createStmt(conn);
ResultSet rsCount = DB.executeQuery(stmtCount, "select count(*) from article where pid = 0");
rsCount.next();
int totalRecords = rsCount.getInt(1);
3.PageUtil pageUtil=new PageUtil(totalRecords);
int startRow=pageUtil.getStartRow(strPageNo);
4.取对应信息,如
List<Article> articles = new ArrayList<Article>();
Statement stmt = DB.createStmt(conn);
String sql = "select * from article where pid = 0 order by pdate desc limit " + startRow + "," + pageUtil.getPAGE_SIZE() ;
ResultSet rs = DB.executeQuery(stmt, sql);
while(rs.next()) {
Article a = new Article();
a.initFromRs(rs);
articles.add(a);
二、分页标签
页: 第<%=pageUtil.getCurrPage() %>页,共页
<a href="url?pageNo=1">第一页</a>
<a href="url?pageNo=<%=pageUtil.getCurrPage()- 1 %>">上一页</a>
<a href="url?pageNo=<%=pageUtil.getCurrPage()+ 1 %>">下一页</a>
<a href="url?pageNo=<%=pageUtil.getTotalPages() %>">最末页</a>
}
*/
public class PageUtil {
/**
* 每页展示的条数
*/
private final int PAGE_SIZE=2;
/**
* 要展示的数据总共的记录数
*/
private int totalRecords;
/**
* 总共的页码
*/
private int totalPages;
/**
* 当前的页码
*/
private int currPage;
public PageUtil(int totalRecords){
this.totalRecords=totalRecords;
totalPages=(totalRecords+PAGE_SIZE-1)/PAGE_SIZE;//计算总共的页码
}
/**
* 得到第pageNo页的开始行的行号
* @return
*/
public int getStartRow(String strPageNo){
int pageNo=0;
if(strPageNo==null){
pageNo=1;
}
if(strPageNo != null && !strPageNo.trim().equals("")) {
try {
pageNo = Integer.parseInt(strPageNo);
} catch (NumberFormatException e) {
pageNo = 1;
}
}
/*
* 验证所给行号的正确性
*/
if(pageNo<=0){
pageNo=1;
}else if(pageNo>totalPages){
pageNo=totalPages;
}
currPage=pageNo;
int startRow=0;
startRow=(pageNo-1)*PAGE_SIZE;//计算开始的行号
return startRow;
}
public int getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
}
public int getTotalPages() {
return totalPages;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public int getCurrPage() {
return currPage;
}
public void setCurrPage(int currPage) {
this.currPage = currPage;
}
public int getPAGE_SIZE() {
return PAGE_SIZE;
}
}