第一步:写分页的工具类

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)保存分页得到的数据,这里保存。

app上java分页_javaee


第三步:将分页过的list通过遍历放到表格中

app上java分页_app上java分页_02

第四步:将相关信息,有几页,当前几页放到页面中,这里使用的是JSTL中的c和EL表达式

app上java分页_数据_03

具体的实战实现:当我们点击对应的页码时出现相应的数据

app上java分页_数据_04


①:将页面设置为a标签,这样可以跳转,这个是带参跳转,带的参数就是当前的页码数,然后跳转到我们之前存分页后的list的页面,根据页码数对list进行截取相应的数据。

app上java分页_app上java分页_05

②:当我们跳转到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条,所以越界了,这时我们进行判断就可以了,就是判断结束时的下标大于总行数时,

app上java分页_数据_06


最好在工具类里面就改好,降低耦合度。

分页功能差不多了,下一篇是批量删除功能。