第一步:写分页的工具类
package com.lsl.util;
import java.util.List;
/**
* 分页的工具类
* @author
*
*/
public class PageUtil {
//数据的结果集合
private List data;
//总行数
private int rowCount;
//每页显示的条数
private int pageSize;
//总页数
private int pageCount;
//当前页
private int pageNum;
//开始的下标
private int beginIndex;
//结束下标
private int endIndex;
public PageUtil(List data) {
//得到结果集
this.data=data;
//通过结果集可以得到总行数
this.rowCount=data.size();
//通过总行数、每页显示几条数据 得出总页数 ,rowCount/pageSize如果不能整除加一
if(this.rowCount % this.pageSize ==0) {
this.pageCount=this.rowCount/this.pageSize;
}else {
this.pageCount=this.rowCount/this.pageSize + 1;
}
//当前页默认1
this.pageNum=1;
//通过当前页、每页显示几条数据,可以得出开始于结束的下标,列如,每页显示5条数据,总11条
//1 1-5
//2 6-10
//3 11
//this.beginIndex=(this.pageNum-1) * this.pageSize+1;
//this.endIndex=this.pageNum * this.pageSize;
this.setPageNum(pageNum);
}
public List getData() {
return data;
}
public void setData(List data) {
this.data = data;
}
public int getRowCount() {
return rowCount;
}
public void setRowCount(int rowCount) {
this.rowCount = rowCount;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
//开始下标
this.beginIndex=(this.pageNum-1) * this.pageSize+1;
//结束下标
this.endIndex=this.pageNum * this.pageSize;
}
public int getBeginIndex() {
return beginIndex;
}
public void setBeginIndex(int beginIndex) {
this.beginIndex = beginIndex;
}
public int getEndIndex() {
return endIndex;
}
public void setEndIndex(int endIndex) {
this.endIndex = endIndex;
}
@Override
public String toString() {
return "PageUtil [rowCount=" + rowCount + ", pageSize=" + pageSize + ", pageCount="
+ pageCount + ", pageNum=" + pageNum + ", beginIndex=" + beginIndex + ", endIndex=" + endIndex + "]";
}
}
第二步:使用工具类并通过作用域(session)保存分页得到的数据,这里保存。
第三步:将分页过的list通过遍历放到表格中
第四步:将相关信息,有几页,当前几页放到页面中,这里使用的是JSTL中的c和EL表达式
具体的实战实现:当我们点击对应的页码时出现相应的数据
①:将页面设置为a标签,这样可以跳转,这个是带参跳转,带的参数就是当前的页码数,然后跳转到我们之前存分页后的list的页面,根据页码数对list进行截取相应的数据。
②:当我们跳转到servlet中时,我们就要考虑分页的问题了,首先我要获取页面的信息,也就是我们刚刚带那个参数,其次我们要判断它是第几次进入的,我们不可能每一次获取相关页面的信息都要取一次list吧。
//获取页码信息
String pageNumber = request.getParameter("pageNumber");
//第一次进来
if(pageNumber == null || "".equals(pageNumber))
{
//1.获取查询的参数信息
String realName = request.getParameter("realname");
String sex = request.getParameter("sex");
String certTypeID = request.getParameter("certType");
String cert = request.getParameter("cert");
String userTypeID = request.getParameter("userType");
System.out.println(realName + " " + sex + " " + certTypeID + " " + cert + " " + userTypeID);
//2.将信息封装到User对象
User user = new User();
user.setRealname(realName);
user.setSex(sex);
user.setCertTypeID(Integer.parseInt((certTypeID==null || certTypeID.length() ==0)?"0":certTypeID));
user.setCert(cert);
user.setUserTypeID(Integer.parseInt((userTypeID==null || userTypeID.length() ==0)?"0":userTypeID));
//2.调用service方法完成查询
IUserService userService = UserServiceImpl.getInstance();
List<User> userList = userService.selectUsers(user);//所有用户信息---11条数据
//2.1 分页
PageUtil pu = new PageUtil(userList);
System.out.println("第一次,分页信息:" + pu);
//2.2 获取第一页分页的数据
List<User> subUserList = userList.subList(pu.getBeginIndex()-1, pu.getEndIndex()); //获取【第一页1-5】数据,不包括结束位置
//3.将数据保存到作用域
session.setAttribute("userList", userList);//所有符合条件的用户信息
session.setAttribute("subUserList", subUserList);//所有符合条件的用户中【第一页】信息
session.setAttribute("pu", pu);//分页信息
//保存查询的参数
session.setAttribute("selectParams", user);
}
//下一次进来,即点击分页页码进入
else
{
//1.获取保存在session中的所有用户信息
List<User> userList = (List<User>)session.getAttribute("userList");//所有用户信息---11条数据
//2.获取保存在session中的分页信息
PageUtil pu = (PageUtil)session.getAttribute("pu");
pu.setPageNum(Integer.parseInt(pageNumber));//设置页码
System.out.println("点击分页页码,分页信息:" + pu);
//3. 获取指定页码分页的数据
List<User> subUserList = userList.subList(pu.getBeginIndex()-1, pu.getEndIndex()); //获取【指定页码】数据,不包括结束位置
//4.将数据保存到作用域
session.setAttribute("subUserList", subUserList);//所有符合条件的用户中【第一页】信息
session.setAttribute("pu", pu);//分页信息
}
//4.跳转到页面UserManageQuery.jsp
response.sendRedirect(request.getContextPath() + "/Admin/UserManageQuery.jsp");
}
③:注意这里可能会出现一个bug toindex ,下标越界,因为我只有11条数据,在第三页时我算的时候是15条,所以越界了,这时我们进行判断就可以了,就是判断结束时的下标大于总行数时,
最好在工具类里面就改好,降低耦合度。
分页功能差不多了,下一篇是批量删除功能。