SSH的分页网上有不少的例子,有利用session的,有利用分页组件的。我几个师兄原来搞的SSH项目也有一个成熟的分页插件。
具体业务实现类中的分页方法:
public List get*****(int pageNO){ DetachedCriteria dc = DetachedCriteria.forClass(****.class); List list=*****Dao.getList(dc,pageNO,15); int a = 0; if (list.equals(null)){a=1;} return list; }
public PageBean getBean(int pageNO) { ***** jg; DetachedCriteria dc = DetachedCriteria.forClass(*****.class); PageBean pb=collegeDao.getPageBean(dc,pageNO,15); return pb; }
然后是一个PageBean的工具类,负责创建分页属性和基本逻辑。
然后是页面的bean获取输出信息及分页属性。
我觉得单纯的拷贝,自己用的不是很顺手。于是自己也搞了一个,个人认为可以清晰的分层,实现这个分页。分层还是传统的SSH七层结构。
SSH结构思想参考我的另一篇随笔SSH思想之我见!
下面是分页思想,一个初始化方法和一个分页实现方法:
分页的util类:
package com.sy.util; import java.util.List; @SuppressWarnings("unchecked") public class Page { private int pageSize; private int totalPage; private int rowCount; private int currentPage; private int prePage; private int nextPage; private boolean hasNextPage; private boolean hasPreviousPage; private List list; public Page() { this.pageSize=10; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public int getRowCount() { return rowCount; } public void setRowCount(int rowCount) { this.rowCount = rowCount; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getPrePage() { return prePage; } public void setPrePage(int prePage) { this.prePage = prePage; } public int getNextPage() { return nextPage; } public void setNextPage(int nextPage) { this.nextPage = nextPage; } public boolean isHasNextPage() { return hasNextPage; } public void setHasNextPage(boolean hasNextPage) { this.hasNextPage = hasNextPage; } public boolean isHasPreviousPage() { return hasPreviousPage; } public void setHasPreviousPage(boolean hasPreviousPage) { this.hasPreviousPage = hasPreviousPage; } public List getList() { return list; } public void setList(List list) { this.list = list; } }
/* * 施杨的分页daoimpl类 * */ package com.sy.dao.impl; 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; import com.sy.dao.BaseDao; import com.sy.util.Page; @SuppressWarnings("unchecked") public class PageDaoImpl extends HibernateDaoSupport { private String hql; public Page page; public int start; public BaseDao dao; public void setDao(BaseDao dao) { this.dao = dao; } public void init(int start,String tableName){ // ͨ page = new Page(); this.hql = "from "+tableName; this.start = start; setRowCount(); setTotalPage(); setCurrentPage(); setPrePage(); setNextPage(); setPreOrNextBoolean(); } public int getRowCount(){ List list = dao.find(hql); if(list.isEmpty()){ return 0; } return list.size(); } public Page getPage(){ List list = (List)getHibernateTemplate().execute(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery(hql); query.setFirstResult(getStartIndex()); query.setMaxResults(page.getPageSize()); return query.list(); } }); page.setList(list); return page; } public void setPreOrNextBoolean() { if (page.getCurrentPage() <= 1) { page.setHasPreviousPage(false); } else { page.setHasPreviousPage(true); } if (page.getCurrentPage() >= page.getTotalPage()) { page.setHasNextPage(false); } else { page.setHasNextPage(true); } } public void setCurrentPage() { if (start < 1) { page.setCurrentPage(1); } if (start > page.getTotalPage()) { page.setCurrentPage(page.getTotalPage()); } page.setCurrentPage(start); } public void setPrePage() { page.setPrePage(page.getCurrentPage() - 1); } public void setNextPage() { page.setNextPage(page.getCurrentPage() + 1); } public void setTotalPage() { int rowCount = getRowCount(); int pageSize = page.getPageSize(); if (rowCount > pageSize) { if (rowCount % pageSize == 0) { page.setTotalPage(rowCount / pageSize); } else { page.setTotalPage(1 + (rowCount / pageSize)); } } else { page.setTotalPage(1); } } public void setRowCount() { page.setRowCount(getRowCount()); } public int getStartIndex() { int startIndex = 0; if (start < 0) { startIndex = 0; } else { if (start > page.getTotalPage()) { startIndex = page.getPageSize() * (page.getTotalPage() - 1); } else { startIndex = page.getPageSize() * (start - 1); } } return startIndex; } }然后是业务层接口,举例AdminService.java
//管理员service层接口 package com.sy.service; import java.util.List; import com.sy.util.Page; import com.sy.vo.Admin; public interface AdminService extends BaseService{ //分页初始化 public void init(int pno); //分页实现 public Page getPage(); }实现类AdminServiceImpl.java
//管理员service层实现类 package com.sy.service.impl; import java.util.List; import com.sy.dao.impl.AdminDaoImpl; import com.sy.dao.impl.PageDaoImpl; import com.sy.service.AdminService; import com.sy.util.Page; import com.sy.vo.Admin; @SuppressWarnings("unchecked") public class AdminServiceImpl extends BaseServiceImpl implements AdminService { public Page getPage() { return Pdao.getPage(); } public void init(int pno) { String tableName="Admin"; Pdao.init(pno,tableName); } }
package com.sy.action; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; import com.sy.form.AdminForm; import com.sy.form.LoginForm; import com.sy.service.AdminService; import com.sy.util.MD5; import com.sy.util.Page; import com.sy.vo.Admin; @SuppressWarnings("unchecked") public class AdminAction extends BaseAction { . //查看管理员 public ActionForward listAdmins(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { AdminService as=(AdminService)super.getBean("AdminService"); int pno = (new Integer(request.getParameter("pno"))).intValue(); as.init(pno); Page myPage = as.getPage(); List myList = as.getPage().getList(); request.setAttribute("myPage", myPage); request.setAttribute("AdminList", myList); return mapping.findForward("show"); } }
结构清晰,也很实用。
页面lookAdmin.jsp
<%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %> <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %> <html> <head> <meta http-equiv="Content-Language" content="zh-cn"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>施杨SSH新闻发布</title> </head> <body> <center> <h3> 查看管理员 </h3> <br> <a href="./admin/addAdmin.jsp">添加管理员</a> <br> <a href="./NewsPage2.do?pno=1">查看新闻</a> <br> <table border="2" width="600"> <tr> <td> 用户名 </td> <td> 密码 </td> <td> 操作 </td> </tr> <c:forEach items="${requestScope['AdminList']}" var="admin"> <tr align="center"> <td width="20%" height="10"><c:out value="${admin.aname}" /></td> <td width="20%" height="10"><c:out value="${admin.apassword}" /></td> <td> <a href="./editAdmin.do?aid=<c:out value="${admin.aid}"/>">修改</a> <a href="./deleteAdmin.do?aid=<c:out value="${admin.aid}"/>" onclick="javascript:return confirm('您确定删除吗?')">删除</a> </td> </tr> </c:forEach> </table> <table align="center" width="500"> <tr> <td align="center" colspan="10"> <logic:present name="myPage"> <html:link page="/AdminPage.do?pno=1">首页</html:link> <logic:equal name="myPage" property="hasPreviousPage" value="false">上一页</logic:equal> <logic:equal name="myPage" property="hasPreviousPage" value="true"> <a href="./AdminPage.do?pno=<bean:write name="myPage" property="prePage"/>">上一页</a> </logic:equal> 每页<bean:write name="myPage" property="pageSize"/>条记录 共<bean:write name="myPage" property="rowCount"/>条记录 当前第(<bean:write name="myPage" property="currentPage"/>/<bean:write name="myPage" property="totalPage"/>)页 <logic:equal name="myPage" property="hasNextPage" value="false">下一页</logic:equal> <logic:equal name="myPage" property="hasNextPage" value="true"> <a href="./AdminPage.do?pno=<bean:write name="myPage" property="nextPage"/>">下一页</a> </logic:equal> <a href="./AdminPage.do?pno=<bean:write name='myPage' property='totalPage'/>">末页</a> </logic:present> </td> </tr> </table> </center> </body> </html>
转载注明:www.cnblogs.com/shiyangxt
作者:施杨(施杨's Think out)
出处:http://shiyangxt.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。