1、首先实现一个分页显示的基类
import java.sql.SQLException;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
//在hibernateDaoSupport基础上实现了分页
public class MyHibernateDaoSupport extends HibernateDaoSupport
{
public List<?> findByPage(final String hql,final int offset,final int pageSize)
{
List<?> list = getHibernateTemplate().executeFind(new HibernateCallback<Object>()
{
@Override
public Object doInHibernate(org.hibernate.Session session)
throws HibernateException, SQLException
{
List<?> result = session.createQuery(hql).setFirstResult(offset).setMaxResults(pageSize).list();
return result;
}
});
return list;
}
public List<?> findByPage(final String hql,final Object value,final int offset,final int pageSize)
{
List<?> list = getHibernateTemplate().executeFind(new HibernateCallback<Object>()
{
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException
{
List<?> result = session.createQuery(hql).setParameter(0, value).setFirstResult(offset).setMaxResults(pageSize).list();
return result;
}
});
return list;
}
public List<?> findByPage(final String hql,final Object[] values,final int offset,final int pageSize)
{
List<?> list = getHibernateTemplate().executeFind(new HibernateCallback<Object>()
{
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException
{
Query query = session.createQuery(hql);
for(int i = 0; i < values.length; i++)
{
query.setParameter(i, values[i]);
}
List<?> result = query.setFirstResult(offset).setMaxResults(pageSize).list();
return result;
}
});
return list;
}
}
2、创建Dao组件,继承1中的基类,并实现分页显示方法
public class CardDaoHibernate extends MyHibernateDaoSupport implements CardDao
{
@SuppressWarnings("unchecked")
@Override
public List<Card> findAllByPage(int pageNo, int pageSize)
{
if(pageNo < 1)
return null;
int offset = (pageNo - 1) * pageSize;
return (List<Card>) findByPage("from Card",offset,pageSize);
}
@SuppressWarnings("unchecked")
@Override
public List<Card> findAll()
{
// TODO Auto-generated method stub
return (List<Card>)getHibernateTemplate().find("from Card");
}
}
3、在service中实现分页显示,并获取总页数
public class ServiceImpl implements Service
{
public static final int PAGESIZE = 5;
private CardDao cardDao;
@Override
public int getCardPageCount() throws MyException
{
try
{
List<Card> list = cardDao.findAll();
int count = list.size();
return (count + PAGESIZE - 1) / PAGESIZE;
}catch(Exception e)
{
e.printStackTrace();
throw new MyException;
}
}
@Override
public List<Card> getCardByPage(int pageNo) throws MyException
{
try
{
return cardDao.findAllByPage(pageNo, PAGESIZE);
}catch(Exception e)
{
e.printStackTrace();
throw new MyException;
}
}
4、分页显示的Action
@SuppressWarnings("serial")
public class ShowCardListAction extends ActionSupport
{
private Service service;
private String pageNumber;
private int currentPage;
private List<Card> cardList;
public Service getService()
{
return service;
}
public void setService(Service service)
{
this.service = service;
}
public String getPageNumber()
{
return pageNumber;
}
public void setPageNumber(String pageNumber)
{
this.pageNumber = pageNumber;
}
public int getCurrentPage()
{
return currentPage;
}
public void setCurrentPage(int currentPage)
{
this.currentPage = currentPage;
}
public List<Card> getCardList()
{
return cardList;
}
public void setCardList(List<Card> cardList)
{
this.cardList = cardList;
}
@Override
public String execute() throws Exception
{
ActionContext ctx = ActionContext.getContext();
int pageCount = service.getCardPageCount();
if(pageCount < 1)
{
ctx.put("tip", "没有记录");
return ERROR;
}
int pageNo;
//第一次查看,显示第一页
if(getPageNumber() == null || getPageNumber().equals(""))
{
pageNo = 1;
}
else
{
pageNo = Integer.parseInt(getPageNumber().trim());
}
if(pageNo < 1)
{
pageNo = 1;
}
if(pageNo > pageCount)
{
pageNo = pageCount;
}
//总页数信息
ctx.put("pageCount", pageCount);
//当前查看的页号
setCurrentPage(pageNo);
List<Card> list = service.getCardByPage(pageNo);
setCardList(list);
return SUCCESS;
}
4、分页显示的页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="/CardManagerSystem/css/style.css" type="text/css">
<title>校园卡管理系统</title>
</head>
<body>
<s:set name="page" value="currentPage"></s:set>
<s:set name="last" value="pageCount"></s:set>
<div id="body">
<div class="content" align="center">
<table width="600" border="0" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC" class="ss" style="font-size: 16px;text-align: center">
<tr height="30px">
<th bgcolor="#F7F7F7">卡号</th>
<th bgcolor="#F7F7F7">姓名</th>
</tr>
<s:iterator value="cardList" status="m">
<tr height="30px">
<td align="center" bgcolor="#F7F7F7"><s:property value="number"/></td>
<td align="center" bgcolor="#F7F7F7"><s:property value="name"/></td>
</tr>
</s:iterator>
</table>
<br>
<div align="center" style="font-size: 18px">
当前页码 <s:property value="currentPage"/>
总页数 ${requestScope.pageCount}
<a href="showCardList.action?pageNumber=1">第一页</a>
<s:if test="#page>1">
<a href="showCardList.action?pageNumber=${requestScope.currentPage - 1}">上一页</a>
</s:if>
<s:if test="#page<#last">
<a href="showCardList.action?pageNumber=${requestScope.currentPage + 1}">下一页</a>
</s:if>
<a href="showCardList.action?pageNumber=${requestScope.pageCount}">最后页</a>
</div>
</div>
</div>
</body>
</html>