Pager类
import java.math.*;
public class Pager {
private int totalRows; //总行数
private int pageSize = 8; //每页显示的行数
private int currentPage; //当前页号
private int totalPages; //总页数
private int startRow; //当前页在数据库中的起始行
public Pager() {
}
public Pager(int _totalRows) {
totalRows = _totalRows;
totalPages=totalRows/pageSize;
int mod=totalRows%pageSize;
if(mod>0){
totalPages++;
}
currentPage = 1;
startRow = 0;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getStartRow() {
return startRow;
}
public void setStartRow(int startRow) {
this.startRow = startRow;
}
public int getTotalPages() {
return totalPages;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public int getTotalRows() {
return totalRows;
}
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
//转到任何一页
public void anyPage(int currentPage) {
this.currentPage=currentPage;
startRow=(currentPage-1)* pageSize;
}
//转到首页
public void first() {
currentPage = 1;
startRow = 0;
}
//转到上一页
public void previous() {
if (currentPage == 1) {
return;
}
currentPage--;
startRow = (currentPage - 1) * pageSize;
}
//转到下一页
public void next() {
if (currentPage < totalPages) {
currentPage++;
}
startRow = (currentPage - 1) * pageSize;
}
//转到尾页
public void last() {
currentPage = totalPages;
startRow = (currentPage - 1) * pageSize;
}
//设置当前页
public void refresh(int _currentPage) {
currentPage = _currentPage;
if (currentPage > totalPages) {
last();
}
}
}
PagerHelper类
public class PagerHelper {
public static Pager getPager(HttpServletRequest request,
int totalRows) {
//定义pager对象,用于传到页面
Pager pager = new Pager(totalRows);
//从Request对象中获取当前页号
String currentPage = request.getParameter("currentPage");
//如果当前页号为空,表示为首次查询该页
//如果不为空,则刷新pager对象,输入当前页号等信息
if (currentPage != null) {
pager.refresh(Integer.parseInt(currentPage));
}
//获取当前执行的方法,首页,前一页,后一页,尾页。
String pagerMethod = request.getParameter("pageMethod");
if (pagerMethod != null) {
if (pagerMethod.equals("first")) {
pager.first();
} else if (pagerMethod.equals("previous")) {
pager.previous();
} else if (pagerMethod.equals("next")) {
pager.next();
} else if (pagerMethod.equals("last")) {
pager.last();
}else{
pager.anyPage(Integer.parseInt(pagerMethod));
}
}
return pager;
}
}
Action
public class Download_findAllAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DownloadDao downloadDao=new DownloadDao();
int totalRows =downloadDao.getRows("from Download download");
Pager pager=PagerHelper.getPager(request,totalRows);
List list=downloadDao.findAll(pager.getStartRow(),pager.getPageSize());
request.setAttribute("result", list);
request.setAttribute("PAGER", pager);
return mapping.findForward("success");
}
}
Dao
public class DownloadDao{
//查找所有
public List findAll(int startRow,int pageSize) {
session = HibernateSessionFactory.getSession();
Query query=session.createQuery("from Download download order by download.id desc");
query.setFirstResult(startRow);
query.setMaxResults(pageSize);
List list=query.list();
HibernateSessionFactory.closeSession();
return list;
}
//返回查询总记录数
public int getRows(String hql){
session = HibernateSessionFactory.getSession();
Query query=session.createQuery(hql);
List list=query.list();
int totalRows=list.size();
//System.out.println(totalRows);
HibernateSessionFactory.closeSession();
return totalRows;
}
}
jsp页面
<tr>
<td width="40%" align="center">页次:<bean:write name="PAGER" property="currentPage" />/<bean:write name="PAGER" property="totalPages" /> 每页<bean:write name="PAGER" property="pageSize" /> 共计:<bean:write name="PAGER" property="totalRows" /> </td>
<td width="55%">
<a href="download_findAllAction.do?pageMethod=first¤tPage=<bean:write name='PAGER' property='currentPage'/>">首页</a>
<a href="download_findAllAction.do?pageMethod=previous¤tPage=<bean:write name='PAGER' property='currentPage'/>">上一页</a>
<a href="download_findAllAction.do?pageMethod=next¤tPage=<bean:write name='PAGER' property='currentPage'/>">下一页</a>
<a href="download_findAllAction.do?pageMethod=last¤tPage=<bean:write name='PAGER' property='currentPage'/>">尾页</a>
<select name="page" onchange="location.href=this.options[this.selectedIndex].value;">
<%
Pager pager=(Pager)request.getAttribute("PAGER");
for (int i=1;i<=pager.getTotalPages();i++)
{
if(pager.getCurrentPage()==i)
{
%>
<option value="download_findAllAction.do?pageMethod=<%=i%>" selected="selected">
<%=i%>
</option>
<%
}else{
%>
<option value="download_findAllAction.do?pageMethod=<%=i%>">
<%=i%>
</option>
<%}%>
<%} %>
</select>
</td>
</tr>