<div class="iteye-blog-content-contain" style="font-size: 14px"></div>
1:分页要维护的信息很多,我们把这些相关的信息,分装到一个类中,PageView
import java.util.List; /** * 封装分页的参数 * * * */ public class PageView<T> { private int currentPage = 1; // 当前页, 默认显示第一页 private int pageCount = 4; // 每页显示的行数(查询返回的行数), 默认每页显示4行 private int totalCount; // 总记录数 private int totalPage; // 总页数 = 总记录数 / 每页显示的行数 (+ 1) private List<T> pageData; // 分页查询到的数据 // 返回总页数 public int getTotalPage() { if (totalCount % pageCount == 0) { totalPage = totalCount / pageCount; } else { totalPage = totalCount / pageCount + 1; } 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 getPageCount() { return pageCount; } public void setPageCount(int pageCount) { this.pageCount = pageCount; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public List<T> getPageData() { return pageData; } public void setPageData(List<T> pageData) { this.pageData = pageData; } }
2:在dao层
<1>获取总查询记录数
@Override public int getTotalCount() { // TODO Auto-generated method stub int count = 0; Connection conn = DBUtil.getConn(); String sql = "select count(*) from forum"; try{ PreparedStatement ps= conn.prepareStatement(sql); ResultSet rs = ps.executeQuery(); while(rs.next()){ count = rs.getInt(1); return count; } }catch(SQLException e){ e.printStackTrace(); } return count; }
<2>分页查询数据,将查询到的数据设置到pageView对象中
//首先根据查询的起始行和查询的记录数封装成一个PageDate @Override public List<Forum> getPageDate(int index,int pageCount) { // TODO Auto-generated method stub UserDao userDao = new UserDaoImpl(); List<Forum> list = new ArrayList<Forum>(); Connection conn = DBUtil.getConn(); String sql="select * from forum order by time desc limit ?,? "; try{ PreparedStatement ps = conn.prepareStatement(sql); ps.setInt(1, index); ps.setInt(2, pageCount); ResultSet rs = ps.executeQuery(); while(rs.next()){ Forum forum = new Forum(); forum.setId(rs.getInt("id")); forum.setChoose(rs.getString("choose")); forum.setTitle(rs.getString("title")); forum.setTime(rs.getDate("time")); forum.setContent(rs.getString("content")); forum.setPic(rs.getString("pic")); // forum.setUid(rs.getInt("uid")); forum.setView(rs.getInt("view")); forum.setUser(userDao.selectUserById(rs.getInt("uid"))); list.add(forum); } }catch(SQLException e){ e.printStackTrace(); } return list; }
调用上述方法,将pv整体作为参数传递进去 @Override public void getAll(PageView<Forum> pv) { int totalCount = this.getTotalCount(); pv.setTotalCount(totalCount); if (pv.getCurrentPage() <=0) { pv.setCurrentPage(1); // 把当前页设置为1 } else if (pv.getCurrentPage() > pv.getTotalPage()){ pv.setCurrentPage(pv.getTotalPage()); // 把当前页设置为最大页数 } int currentPage = pv.getCurrentPage(); int index = (currentPage -1 ) * pv.getPageCount(); int count = pv.getPageCount(); List<Forum> pageData = forumDao.getPageDate(index, count); //分页查询,将查询到的数据设置到对象中 pv.setPageData(pageData); }
3:在servlet中调用查询,并把pageView作为参数传入。当查询结束后,pageBean的参数已经是查询后的记录,servlet再把查询后的结果,也就是封装在pageBean中的信息保存到域中发送到jsp页面
try { //1. 获取“当前页”参数; (第一次访问当前页为null) String currPage = request.getParameter("currentPage"); // 判断 if (currPage == null || "".equals(currPage.trim())){ currPage = "1"; // 第一次访问,设置当前页为1; } // 转换 int currentPage = Integer.parseInt(currPage); //2. 创建PageView对象,设置当前页参数; 传入service方法参数 PageView<Forum> pageBean = new PageView<Forum>(); pageBean.setCurrentPage(currentPage); //3. 调用service forumService.getAll(pageBean); // 【pageBean已经被dao填充了数据】 //4. 保存pageBean对象,到request域中 request.setAttribute("pageBean", pageBean);
4:在jsp显示页面
//将取出的数据循环展示 <c:forEach var="forum" items="${requestScope.pageBean.pageData}"> <sapn>${forum.choose}<span> <span>${forum.title}</span> </c:forEach> <li> <a href="${pageContext.request.contextPath }/pageServlet?currentPage=1">首页</a> </li> <li> <a href="${pageContext.request.contextPath }/pageServlet?currentPage=${requestScope.pageBean.currentPage-1}">上一页</a> </li> <li> <a href="${pageContext.request.contextPath }/pageServlet?currentPage=${requestScope.pageBean.currentPage+1}">下一页</a> </li> <li class="next"> <a href="${pageContext.request.contextPath }/pageServlet?currentPage=${sessionScope.pageBean.totalPage}">末页</a> </li>