分页功能怎么实现 我的struts分页算法的实现
我的struts分页算法的实现
说到分页算法 一般WEB开发都会用到 我只是在我的实现技术上用了struts框架 其实原理都一样的 看了网上相当多的分页算法 有对的也有好多是错的 更有好多是不太优化的 还有以前自己在augmentum做的一个分页算法 总结了一些不足 决定重新再写一个分页算法 首先 应该写个bean来记录存储一些页面的属性分页大致需要如下属性 private int currentPage = ; // 当前页 private int totalPages = ; // 总页数 private int pageRecorders = ;// 每页 条数据 private int totalRows = ; // 总数据数 private int pageStartRow = ;// 每页的起始数 private int pageEndRow = ; // 每页显示数据的终止数 private boolean hasNextPage = false; // 是否有下一页 private boolean hasPreviousPage = false; // 是否有前一页 private int nextPage = ;//下一页的页码 private int previousPage = ;//上一页的页码然后这些属性之间是有联系的 我们可以在构造函数的时候就初始化一些属性有两种方法 一 根据总的页数 (假设当前页为 ) public PageBean(int totalRows){ this totalRows = totalRows; this currentPage = ; hasPreviousPage = false; if ((totalRows % pageRecorders) == ) { totalPages = totalRows / pageRecorders; } else { totalPages = totalRows / pageRecorders + ; } if (totalRows >= pageRecorders) { hasNextPage = true; nextPage = ; this pageEndRow = pageRecorders; } else { this pageEndRow = totalRows; hasNextPage = false; nextPage = ; } this pageStartRow = ; previousPage = ; }然后在按下一页或者上一页的时候需要如下函数处理 public void nextPage() { if(hasNextPage == true) currentPage = currentPage + ; if ((currentPage ) > ) { hasPreviousPage = true; } else { hasPreviousPage = false; } if (currentPage >= totalPages) { hasNextPage = false; this nextPage = currentPage; } else { hasNextPage = true; nextPage = currentPage+ ; } this pageStartRow = (currentPage ) * pageRecorders; if(hasNextPage == true) this pageEndRow = pageStartRow + ; else{ this pageEndRow =this totalPages; } previousPage = currentPage ; } public void previousPage() { if(hasPreviousPage == true) currentPage = currentPage ; if (currentPage == ) { currentPage = ; } if (currentPage >= totalPages) { hasNextPage = false; } else { hasNextPage = true; } nextPage = currentPage + ; if ((currentPage ) > ) { hasPreviousPage = true; previousPage = currentPage ; } else { hasPreviousPage = false; previousPage = currentPage; } this pageStartRow = (currentPage ) * pageRecorders; if(hasNextPage == true) this pageEndRow = pageStartRow + ; else{ this pageEndRow =this totalPages; } }

在HTML中按下一页或者上一页的时候有如下代码 <logic:equal name= page property= hasNextPage value= true ><:link page= /List do?action=nextPage >nextPage</:link></logic:equal><logic:equal name= page property= hasPreviousPage value= true ><:link page= /List do?action=previousPage >PreviousPage</: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 = ; String sql = select count(*) from employee ;//假设是员工表 Database db = new Database(); ResultSet rs = db executeQuery(sql); try { while (rs next()) { String id = (String) rs getString( ); 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进行操作 情况类似
lishixinzhi/Article/program/Java/ky/201311/28793