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