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;//上一頁的頁碼 然后這些屬性之間是有聯(lián)系的,我們可以在構造函數的時候就初始化一些屬性 有兩種方法: 一,根據總的頁數,(假設當前頁為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> 數據庫查詢部分依然適用。 |
|