easyui 分页功能实现

- 定义一个分页的工具类 (三个参数: 开始下标,每页的size,当前页数 )

```PageUtil.java
    //开始下标
	private int startIndex;
	
	//每页的size
	private int pageSize;
	
	//当前页数 
	private int currentPageNo;

	public int getStartIndex() {
		return startIndex;
	}

	public void setStartIndex(int startIndex) {
		this.startIndex = startIndex;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getCurrentPageNo() {
		return currentPageNo;
	}

	public void setCurrentPageNo(int currentPageNo) {
		this.currentPageNo = currentPageNo;
	}

//注意开始下标的获得方式。 
	public PageUtil(int pageSize, int currentPageNo) {
		super();
		
		this.startIndex=(currentPageNo-1)*pageSize;
		this.pageSize = pageSize;
		this.currentPageNo = currentPageNo;
	}

	public PageUtil() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	
	
	
}

```





- dao层方法中, 改一个查询的方法， 增加一个获取总页数的方法。 

```daoImpl.java

//在原有的查询方法中，加一个参数，穿工具类进去 
public List<Enterprise> getEntList(String search_ename, String search_econtact,String search_etel,PageUtil pageUtil) {
		
		//创建一个容器
		List<Enterprise> entList = new ArrayList<Enterprise>();
		
		try {
			String sql = "select * from enterprise where 1=1  ";
			
			//做一个装拼接语句的集合
			ArrayList<Object> al=new ArrayList<Object>();
			
			//动态拼接
			
			if(search_ename!=null&&!search_ename.equals("")) {
				sql=sql+" and ename like ? ";
			
				al.add('%'+ search_ename + '%');	
				
				
			}
			
			if(search_econtact!=null&&!search_econtact.equals("")) {
				sql=sql+" and econtact like ? ";
				
				al.add('%'+search_econtact+'%');				
				
			}
			
			if(search_etel!=null&&!search_etel.equals("")) {
				sql=sql+" and etel like ? ";
				
				al.add("%"+search_etel+"%");				
				
			}
			
			
///！！！！！！！！ 此处为，sql语句，问号为 开始下标，每页记录数 

			sql=sql+" limit ?,?";
			
			//开始下标，每页记录数  （从工具类中获取)
			al.add(pageUtil.getStartIndex());
			al.add(pageUtil.getPageSize());
			
			//集合转数组
			Object[] obj = al.toArray();
				
			ResultSet rs = DBUtils.query(sql, obj);
					
			while(rs.next()) {
				Enterprise ent = new Enterprise();
				ent.setEno(rs.getInt("eno"));
				ent.setEname(rs.getString("ename"));
				ent.setEaddress(rs.getString("eaddress"));
				ent.setEcontact(rs.getString("econtact"));
				ent.setEtel(rs.getString("etel"));
				ent.setEstatus(rs.getInt("estatus"));
				ent.setEmemo(rs.getString("ememo"));
				
				entList.add(ent);
			}
			
			return entList;
		} catch (SQLException e) {
			e.printStackTrace();
			
		}				
		return null;
	}

```


- dao层方法中, 再 增加一个获取总页数的方法。

```daoImpl.java

//参数3个，都是搜索栏里做多项查询的条件。
public int getPageTotal(String search_ename, String search_econtact, String search_etel) {
		//创建一个容器
		//List<Enterprise> entList = new ArrayList<Enterprise>();
		
		try {
//注意这个查总数的sqL语句！！！！！！！！！！！
			String sql = "select count(*) as total from enterprise where 1=1  ";
			
			//做一个装拼接语句的集合
			ArrayList<Object> al=new ArrayList<Object>();
			
			//动态拼接
			
			if(search_ename!=null&&!search_ename.equals("")) {
				sql=sql+" and ename like ? ";
			
				al.add('%'+ search_ename + '%');	
				
				
			}
			
			if(search_econtact!=null&&!search_econtact.equals("")) {
				sql=sql+" and econtact like ? ";
				
				al.add('%'+search_econtact+'%');				
				
			}
			
			if(search_etel!=null&&!search_etel.equals("")) {
				sql=sql+" and etel like ? ";
				
				al.add("%"+search_etel+"%");				
				
			}
								
			
			//集合转数组
			Object[] obj = al.toArray();
			
			ResultSet rs = DBUtils.query(sql, obj);
					
			if(rs.next()) {
//				Enterprise ent = new Enterprise();
//				ent.setEno(rs.getInt("eno"));
//				ent.setEname(rs.getString("ename"));
//				ent.setEaddress(rs.getString("eaddress"));
//				ent.setEcontact(rs.getString("econtact"));
//				ent.setEtel(rs.getString("etel"));
//				ent.setEstatus(rs.getInt("estatus"));
//				ent.setEmemo(rs.getString("ememo"));
				
				//entList.add(ent);
				
				return rs.getInt("total");
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
			
		}				
		return 0;
	}

```


- Servlet中， 接收数据： 

```EntServlet.java
 if ("entList".equals(method)&&from==null) {
			//1、接收参数			
			String  search_ename=request.getParameter("search_ename");
			String  search_econtact=request.getParameter("search_econtact");
			String  search_etel=request.getParameter("search_etel");		
			
			
			//为分页接受的参数  page:当前页数； rows:每页的size .
			int page=request.getParameter("page") == null ? 1 : Integer.parseInt(request.getParameter("page"));
			int rows=request.getParameter("rows") == null ? 10 :Integer.parseInt(request.getParameter("rows"));
			
			
			PageUtil pageUtil=new PageUtil(rows,page);
						
			
			//2、调用dao层  查询
			List<Enterprise> entList= entdao.getEntList(search_ename,search_econtact,search_etel,pageUtil);
			
			//获取总记录数
			int total=entdao.getPageTotal(search_ename, search_econtact, search_etel);
			
			
			//做一个map   要回传的是 ： total: 总的记录数； rows: 查询出来的集合。 
			Map <String, Object> map=new HashMap<String, Object>();
			
			map.put("rows", entList);
			map.put("total", total);
			
			
			//3、json转换数据
			JSONObject jsonMap =  JSONObject.fromObject(map);		
			
			//4、发送数据
			response.getWriter().println(jsonMap);
			
		} 

```

- 页面中，设置分页控件的代码

```student.html
  //设置分页控件 
	    var p = $('#dataList').datagrid('getPager'); 
	    $(p).pagination({ 	    
	        pageSize: 10,//每页显示的记录条数，默认为10 
	        pageList: [10,20,30,50,100],//可以设置每页记录条数的列表 
	        beforePageText: '第',//页数文本框前显示的汉字 
	        afterPageText: '页    共 {pages} 页', 
	        displayMsg: '当前显示 {from} - {to} 条记录   共 {total} 条记录', 
	    });
```