一、分页逻辑
package com.ccit.tools;
import java.util.List;
public class PageDiv<T> {
private int pageNo; //当前页码
private int pageSize; //每一页所要显示的条目数
private int totalNo; //记录总数
private int totalPage; //总页数
private List<T> list; //一页数据
private int begin; //开始页码
private int end; //结束页码
private int listNo; //显示的页码数
public PageDiv(){}
public PageDiv(int pageNo,int pageSize,int totalNo,List<T> list) {
this.pageNo = pageNo;
this.pageSize = pageSize;
this.totalNo = totalNo;
totalPage=(this.totalNo+this.pageSize-1)/this.pageSize;
this.list = list;
listNo = 7;
if(listNo % 2 == 0) { //页码数为偶数时
if(pageNo>=(listNo/2+1)) {
begin = pageNo-listNo/2;
end = pageNo + listNo/2 -1;
if(end>totalPage) {
end = totalPage;
if((end - begin + 1) < listNo) {
begin = end - listNo +1;
}
}
}else {
begin = 1;
end = listNo;
if(end>totalPage) {
end = totalPage;
if((end - begin + 1) < listNo) {
begin = end - listNo +1;
}
}
}
}else {//页码数为奇数时
if(pageNo >= (listNo+1)/2) {
begin = pageNo - (listNo + 1)/2 +1;
end = pageNo + (listNo + 1)/2 -1;
if(end > totalPage) {
end = totalPage;
if((end - begin + 1) < listNo) {
begin = end - listNo +1;
}
}
}else {
begin = 1;
end = listNo;
if(end>totalPage) {
end = totalPage;
if((end - begin + 1) < listNo) {
begin = end - listNo +1;
}
}
}
}
}
public PageDiv(int pageNo,int pageSize) {
this.pageNo = pageNo;
this.pageSize = pageSize;
}
public int getBegin() {
return begin;
}
public void setBegin(int begin) {
this.begin = begin;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
public int getListNo() {
return listNo;
}
public void setListNo(int listNo) {
this.listNo = listNo;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalNo() {
return totalNo;
}
public void setTotalNo(int totalNo) {
this.totalNo = totalNo;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
}
二、从数据库取一页数据
关键是 sql2 的写法
/*取留言的方法,传入的是要显示的页码 和 每一页要显示的留言数*/
public PageDiv<Message> getAll(int pageNo, int pageSize) {
String sql1="select count(id) from t_msg";
String sql2="select * from t_msg order by id desc limit "+((pageNo-1)*pageSize)+","+pageSize;
int totalNo=this.template.getRowCount(sql1);
List<Message> list = this.template.executeQuery(sql2, new MsgRowMapper());//此为调用封装的模板类,在另一篇笔记里有详细代码
return new PageDiv<Message>(pageNo,pageSize,totalNo,list);
}
三、servlet传值
//MessageDao既为对数据库的操作类实现的接口,根据自己的设计调整
MessageDao md = (MessageDao)DaoFactory.getDao("MessageDao");
//在此处能够获得数据返回给pd即可,改为自己的方法
PageDiv<Message> pd = null;
pd = md.getAll(pageNo, 2);//每页两条记录
session.setAttribute("pagediv", pd);
response.sendRedirect("showmsg.jsp");
四、JSP页面
........ <% List<Message> list = pd.getList(); if(null != list){ for(int i=0;i<list.size();i++){ Message m = list.get(i); %> <div class="XX"> <%out.print(m.getContent());%> </div> <%} }%> ........ <ul> <% int pageNo = pd.getPageNo(); int pageSize = pd.getPageSize(); int totalNo = pd.getTotalNo(); int totalPage = pd.getTotalPage(); int listbegin = pd.getBegin(); int listend = pd.getEnd(); %> <li id="numberinfo">当前第<font color="#FF0000"><%=pageNo %>/<%=totalPage %></font>页 共<font color="#FF0000"><%=totalNo %></font>条记录 每页显示<font color="#FF0000"><%=pageSize %>条信息</font></li> <li><% if(pageNo<=1){%> <font style="font-weight:bold"><<</font> <% }else{%><a href="showindex?pageNo=<% out.print(pageNo-1); %>"><font style="font-weight:bold"><<</font></a> <%} %> </li> <% for(int i = listbegin; i <= listend; i++){ if(i!=pageNo) { %> <li><a href="showindex?pageNo=<%=i%>"><% out.print("["); out.print(i); out.print("]"); %></a></li> <%}else{%> <li>[<%out.print(i); %>]</li> <%} }%> <li><% if(pageNo>=totalPage){%> <font style="font-weight:bold">>></font> <% }else{%><a href="showindex?pageNo=<% out.print(pageNo+1); %>"><font style="font-weight:bold">>></font></a> <%} %> </li> </ul>