分页技术-总结
在进行分页的时候,必须知道三个信息:当前页,每页显示记录数,以及总记录数。
所以除了一个Page类,还需一个createPage类,后者构造方法需要三个参数:当前页,每页显示记录数,以及总记录数。
之后后台封装好page类,传递给前端,显示。
一个项目中的Page类:
package com.sanqing.util; public class Page { private int everyPage; //每页显示记录数 private int totalCount; //总记录数 private int totalPage; //总页数 private int currentPage; //当前页 private int beginIndex; //查询起始点 private boolean hasPrePage; //是否有上一页 private boolean hasNextPage; //是否有下一页 public Page(int everyPage, int totalCount, int totalPage, int currentPage,int beginIndex, boolean hasPrePage, boolean hasNextPage) { //自定义构造方法 this.everyPage = everyPage; this.totalCount = totalCount; this.totalPage = totalPage; this.currentPage = currentPage; this.beginIndex = beginIndex; this.hasPrePage = hasPrePage; this.hasNextPage = hasNextPage; } public Page(){} //默认构造函数 public int getEveryPage() { //获得每页显示记录数 return everyPage; } public void setEveryPage(int everyPage) {//设置每页显示记录数 this.everyPage = everyPage; } public int getTotalCount() {//获得总记录数 return totalCount; } public void setTotalCount(int totalCount) {//设置总记录数 this.totalCount = totalCount; } public int getTotalPage() {//获得总页数 return totalPage; } public void setTotalPage(int totalPage) {//设置总页数 this.totalPage = totalPage; } public int getCurrentPage() {//获得当前页 return currentPage; } public void setCurrentPage(int currentPage) {//设置当前页 this.currentPage = currentPage; } public int getBeginIndex() {//获得查询起始点 return beginIndex; } public void setBeginIndex(int beginIndex) {//设置查询起始点 this.beginIndex = beginIndex; } public boolean isHasPrePage() {//获得是否有上一页 return hasPrePage; } public void setHasPrePage(boolean hasPrePage) {//设置是否有上一页 this.hasPrePage = hasPrePage; } public boolean isHasNextPage() {//获得是否有下一页 return hasNextPage; } public void setHasNextPage(boolean hasNextPage) {//设置是否有下一页 this.hasNextPage = hasNextPage; } }
Page辅助类,其构造函数只需要当前页,每页显示记录数,以及总记录数,便可计算出其它:
package com.sanqing.util; /* * 分页信息辅助类 */ public class PageUtil { public static Page createPage(int everyPage,int totalCount,int currentPage) {//创建分页信息对象 everyPage = getEveryPage(everyPage); currentPage = getCurrentPage(currentPage); int totalPage = getTotalPage(everyPage, totalCount); int beginIndex = getBeginIndex(everyPage, currentPage); boolean hasPrePage = getHasPrePage(currentPage); boolean hasNextPage = getHasNextPage(totalPage, currentPage); return new Page(everyPage, totalCount, totalPage, currentPage, beginIndex, hasPrePage, hasNextPage); } public static int getEveryPage(int everyPage) { //获得每页显示记录数 return everyPage == 0 ? 10 : everyPage; } public static int getCurrentPage(int currentPage) { //获得当前页 return currentPage == 0 ? 1 : currentPage; } public static int getTotalPage(int everyPage,int totalCount) {//获得总页数 int totalPage = 0; if(totalCount != 0 &&totalCount % everyPage == 0) { totalPage = totalCount / everyPage; } else { totalPage = totalCount / everyPage + 1; } return totalPage; } public static int getBeginIndex(int everyPage,int currentPage) {//获得起始位置 return (currentPage - 1) * everyPage; } public static boolean getHasPrePage(int currentPage) {//获得是否有上一页 return currentPage == 1 ? false : true; } public static boolean getHasNextPage(int totalPage, int currentPage) { //获得是否有上一页 return currentPage == totalPage || totalPage == 0 ? false : true; } }
实践中的一次应用:servlet代码
//获得该消息对应的所有回复 int currentPage = 0; String currentPageStr = request. getParameter("currentPage");//获得消息回复列表的当前页信息 if(currentPageStr == null || "".equals(currentPageStr)){ currentPage = 1; }else { currentPage = Integer.parseInt(currentPageStr); } ReplyDAO replayDAO = ReplyDAOFactory.getReplyDAOInstance(); Page page = PageUtil.createPage(5, replayDAO. findCountByMsgID(messageID), currentPage);//设置分页信息 List<Reply> replys = replayDAO. findReplayByMsgID(messageID, page);//分页查询消息回复 request.setAttribute("replyList", replys);//保存消息回复列表 request.setAttribute("page", page);//保存分页信息 //获得该消息对象的批复 CriticismDAO criticismDAO = CriticismDAOFactory.getCriticismDAOInstance(); Criticism criticism = criticismDAO.findCriticismByMsgID(messageID); request.setAttribute("criticism", criticism); ServletContext servletContext = getServletContext(); RequestDispatcher dispatcher = servletContext. getRequestDispatcher("/showMsg.jsp"); //跳转到消息显示页 dispatcher.forward(request, response);
前端页面是根据后台传递的page对象处理分页信息。两种方式: