首先在Action类定义当前页的值
private Integer currPage = 1 setter,getter
在spring IOC容器进行注入该变量
在Action类写一个findAll方法,里面有个findByPage()方法
Service层实现:
//分页查询部分方法 public PageBean<Department> findByPage(Integer currPage) { PageBean<Department> pageBean = new PageBean<Department>(); //封装当前页数 pageBean.setCurrPage(currPage); //封装每页显示的记录数 int pageSize = 3; pageBean.setPageSize(pageSize); //封装总记录数 int totalCount = departmentDao.findCount(); double tc = totalCount; pageBean.setTotalCount(totalCount); //封装总页数 Double totalPage = Math.ceil(tc/pageSize); pageBean.setTotalPage(totalPage.intValue()); //封装每页显示的数据 int begin = (currPage-1) * pageSize; java.util.List<Department> depts = departmentDao.findByPage(begin,pageSize); pageBean.setList(depts); return pageBean; }
findAll方法里调用Service层的方法返回一个复杂的集合(有当前页,和查询得到的信息集合),这个集合我们创建一个类pageBean来管理
package cn.nyan.domain; import java.util.List; /** * 分页封装的类 * @author Administrator * */ public class PageBean<T> { private int currPage; private int pageSize;//每页显示的记录数 private int totalCount;//总的记录数 private int totalPage;//总页数 private List<T> list;//每页显示的数据 getter/setter
Dao层实现总记录数的查询和对象的总记录集合
@Override public int findCount() { String hql = "select count(*) from Department"; List<Long> list = this.getHibernateTemplate().find(hql); if(list.size()>0){ return list.get(0).intValue(); } return 0; } @Override public List<Department> findByPage(int begin, int pageSize) { DetachedCriteria criteria = DetachedCriteria.forClass(Department.class); List<Department> list = this.getHibernateTemplate().findByCriteria(criteria, begin, pageSize); return list; }
返回的pageBean通过Action返回页面,将pageBean放入ActionContext值栈中,使用OGNL表达式进行取值
public String findAll(){ PageBean<Department> pageBean = departmentService.findByPage(currPage); //将pageBean放入值栈中 ActionContext.getContext().getValueStack().push(pageBean); return "findAll"; }
在页面读取:
<table cellspacing="0" border="1" class="table1"> <thead> <tr><th width="450">部门名称</th><th width="450">编辑</th></tr> </thead> <!-- 获取pageBean对象属性 --> <s:iterator value="list" var="department"> <tbody> <tr> <td align="center"><s:property value="#department.dname"/></td> <td align="center"><a href="editDept.jsp"><img src="${pageContext.request.contextPath }/images/edit.png"></a></td> </tr> </tbody> </s:iterator> </table> <br/> <table border="0" cellspacing="0" cellpadding="0" width="900px"> <tr> <td align="right"> <span>第<s:property value="currPage"/>/<s:property value="totalPage"/>页</span> <span> <s:if test="currPage != 1"> <a href="${pageContext.request.contextPath }/department_findAll.action?currPage=1">[首页]</a> <a href="${pageContext.request.contextPath }/department_findAll.action?currPage=<s:property value="currPage-1"/>">[上一页]</a> </s:if> <s:if test="currPage != totalPage"> <a href="${pageContext.request.contextPath }/department_findAll.action?currPage=<s:property value="currPage+1"/>">[下一页]</a> <a href="${pageContext.request.contextPath }/department_findAll.action?currPage=<s:property value="totalPage"/>">[尾页]</a> </s:if> </span> </td> </tr> </table>