private int currentPage = 1; // 当前页
private int totalPages = 0; // 总页数 private int pageRecorders = 5;// 每页5条数据 private int totalRows = 0; // 总数据数 private int pageStartRow = 0;// 每页的起始数 private int pageEndRow = 0; // 每页显示数据的终止数 private boolean hasNextPage = false; // 是否有下一页 private boolean hasPreviousPage = false; // 是否有前一页 private int nextPage = 0;//下一页的页码 private int previousPage = 0;//上一页的页码 然后这些属性之间是有联系的,我们可以在构造函数的时候就初始化一些属性 有两种方法: 一,根据总的页数,(假设当前页为1) public PageBean(int totalRows){ this.totalRows = totalRows; this.currentPage = 1; hasPreviousPage = false; if ((totalRows % pageRecorders) == 0) { totalPages = totalRows / pageRecorders; } else { totalPages = totalRows / pageRecorders + 1; } if (totalRows >= pageRecorders) { hasNextPage = true; nextPage = 2; this.pageEndRow = pageRecorders; } else { this.pageEndRow = totalRows; hasNextPage = false; nextPage = 1; } this.pageStartRow = 0; previousPage = 1; } 然后在按下一页或者上一页的时候需要如下函数处理: public void nextPage() { if(hasNextPage == true) currentPage = currentPage + 1; if ((currentPage - 1) > 0) { hasPreviousPage = true; } else { hasPreviousPage = false; } if (currentPage >= totalPages) { hasNextPage = false; this.nextPage = currentPage; } else { hasNextPage = true; nextPage = currentPage+1; } this.pageStartRow = (currentPage -1) * pageRecorders; if(hasNextPage == true) this.pageEndRow = pageStartRow + 5; else{ this.pageEndRow =this.totalPages; } previousPage = currentPage - 1; } public void previousPage() { if(hasPreviousPage == true) currentPage = currentPage - 1; if (currentPage == 0) { currentPage = 1; } if (currentPage >= totalPages) { hasNextPage = false; } else { hasNextPage = true; } nextPage = currentPage + 1; if ((currentPage - 1) > 0) { hasPreviousPage = true; previousPage = currentPage - 1; } else { hasPreviousPage = false; previousPage = currentPage; } this.pageStartRow = (currentPage -1) * pageRecorders; if(hasNextPage == true) this.pageEndRow = pageStartRow + 5; else{ this.pageEndRow =this.totalPages; } } 在HTML中按下一页或者上一页的时候有如下代码: <logic:equal name="page" property="hasNextPage" value="true"> <html:link page="/List.do?action=nextPage"> nextPage </html:link> </logic:equal> <logic:equal name="page" property="hasPreviousPage" value="true"> <html:link page="/List.do?action=previousPage"> PreviousPage </html:link> </logic:equal> 然后在Action中作如下处理: String currentPage = request.getParameter("currentPage"); HttpSession session = request.getSession(); EmployeeForm employeeForm = (EmployeeForm) form; String queryString = null; String queryCon = null; String action = employeeForm.getAction(); List list = new ArrayList(); PageBean pb = null; EmployeeDao employeeDao = new EmployeeDao(); if(action == null || action.equals("null")){ int totalRows = employeeDao.getTotalRows(); pb = new PageBean(totalRows); session.removeAttribute("page"); queryString = employeeForm.getQueryString(); queryCon = employeeForm.getQueryCon(); session.setAttribute("queryString",queryString); session.setAttribute("queryCon",queryCon); list = employeeDao.getAllEmployee(queryString, queryCon, String.valueOf(pb.getPageStartRow()), String.valueOf(pb.getPageRecorders())); }else if(action.equals("nextPage")){ queryString = (String)session.getAttribute("queryString"); queryCon = (String)session.getAttribute("queryCon"); employeeForm.setQueryString(queryString); employeeForm.setQueryCon(queryCon); pb = (PageBean)session.getAttribute("page"); pb.nextPage(); list = employeeDao.getAllEmployee(queryString, queryCon, String.valueOf(pb.getPageStartRow()), String.valueOf(pb.getPageRecorders())); }else if(action.equals("previousPage")){ queryString = (String)session.getAttribute("queryString"); queryCon = (String)session.getAttribute("queryCon"); employeeForm.setQueryString(queryString); employeeForm.setQueryCon(queryCon); pb = (PageBean)session.getAttribute("page"); pb.previousPage(); list = employeeDao.getAllEmployee(queryString, queryCon, String.valueOf(pb.getPageStartRow()), String.valueOf(pb.getPageRecorders())); } pb.description(); session.setAttribute("page",pb); request.setAttribute("admin", "admin"); request.setAttribute("employee", list); return mapping.findForward("showlist"); 然后在数据库查询中有如下代码: /** *查询总记录数 */ public int getTotalRows() { int totalRows = 0; String sql = "select count(*) from employee";//假设是员工表 Database db = new Database(); ResultSet rs = db.executeQuery(sql); try { while (rs.next()) { String id = (String) rs.getString(1); totalRows = Integer.parseInt(id); } } catch (SQLException e) { e.printStackTrace(); } db.close(); return totalRows; } /* *查询每一页需要查询的页码 */ public List getAllEmployee(String queryString, String queryCon,String startRow,String num) { List list = new ArrayList(); String sql = null; if (queryString == null || queryString.equals("")) { sql = "select * from employee,dept " + "where dept.Id = employee.deptId " + "order by employee.id asc"+ " limit "+startRow+","+num; } else { sql = "select * from employee,dept " + "where dept.Id = employee.deptId order by employee." + queryString + " " + queryCon + " limit "+startRow+","+num; } Employee employee = null; Database db = new Database(); ResultSet rs = db.executeQuery(sql); try { while (rs.next()) { String id = (String) rs.getString("employee.id"); String name = (String) rs.getString("employee.name"); String deptId = (String) rs.getString("employee.deptId"); String deptName = (String) rs.getString("dept.deptName"); employee = new Employee(); employee.setId(id); employee.setName(name); employee.setDeptId(deptId); employee.setDeptName(deptName); list.add(employee); } } catch (SQLException e) { e.printStackTrace(); } db.close(); return list; } 这里我用了hibernate进行数据库操作,你也可以用jdbc进行操作,情况类似。 二,根据总的页数,当前页 这样的话构造函数应该写成: public PageBean(int totalRows,int currentPage) { this.totalRows = totalRows; this.currentPage = currentPage; if(currentPage < 2) hasPreviousPage = false; else hasPreviousPage = true; if ((totalRows % pageRecorders) == 0) { totalPages = totalRows / pageRecorders; } else { totalPages = totalRows / pageRecorders + 1; } if (currentPage < totalPages) { hasNextPage = true; nextPage = currentPage + 1; pageStartRow = (currentPage - 1)*pageRecorders; this.pageEndRow = pageStartRow + pageRecorders; } else if(currentPage == totalPages){ pageStartRow = (currentPage - 1)*pageRecorders; this.pageEndRow = totalRows; hasNextPage = false; nextPage = currentPage; } if(currentPage < 2){ previousPage = currentPage; hasPreviousPage = false; }else if(currentPage > 1){ previousPage = currentPage-1; hasPreviousPage = true; } } 在action中应该写成 if(currentPage == null){ pb = new PageBean(totalRows); session.removeAttribute("page"); queryString = employeeForm.getQueryString(); queryCon = employeeForm.getQueryCon(); session.setAttribute("queryString",queryString); session.setAttribute("queryCon",queryCon); list = employeeDao.getAllEmployee(queryString, queryCon, String.valueOf(pb.getPageStartRow()), String.valueOf(pb.getPageRecorders())); } else{ pb = new PageBean(totalRows,Integer.parseInt(currentPage)); queryString = employeeForm.getQueryString(); queryCon = employeeForm.getQueryCon(); session.setAttribute("queryString",queryString); session.setAttribute("queryCon",queryCon); list = employeeDao.getAllEmployee(queryString, queryCon, String.valueOf(pb.getPageStartRow()), String.valueOf(pb.getPageRecorders())); } session.setAttribute("page",pb); request.setAttribute("admin", "admin"); request.setAttribute("employee", list); return mapping.findForward("showlist"); 在jsp中应该写成: <logic:equal name="page" property="hasNextPage" value="true"> <a href="List.do?currentPage=<bean:write name="page" property="nextPage"/>"> nextPage </a> </logic:equal> <logic:equal name="page" property="hasPreviousPage" value="true"> | <a href="/test/List.do?currentPage=<bean:write name="page" property="previousPage"/>"> PreviousPage </a> </logic:equal> 数据库查询部分依然适用。 |
|