分页的封装与使用(1)

<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>

猜你喜欢

转载自xiaotiger.iteye.com/blog/2372549