分页
1.1、导入分页的包 pager-taglib.jar
1.2、创建分页对象
package com.chb.spring_hibernate.model;
import java.util.List;
/**
* 分页对象
*/
public class Pager {
/**
* 数据
*/
private List datas;
/**
* 当前页数
*/
private int pageOffset;
/**
* 总的记录数
*/
private int totalRecord;
/**
* 总的页数
*/
private int pageSize;
...setter getter
}
1.3、修改IBaseDao, list不分页, find分页, 提供三个方法
/** list不分也, find 分页 */
public List find(String hql, Object[] args);
public List find(String hql, Object obj);
public List find(String hql);
}
1.4、在BaseDao中实现
@Override
public List find(String hql, Object[] args) {
//创建分页对象
Pager pager = new Pager();
return null;
}
@Override
public List find(String hql, Object obj) {
return this.find(hql, new Object[] {obj});
}
@Override
public List find(String hql) {
return this.find(hql, null);
}
}
1.4.1、主要关注find(String hql, Object[] args)
1.4.1.1、既然要实现分页, 那么就需要Pager对象
@Override
public List find(String hql, Object[] args) {
//创建分页对象
Pager pager = new Pager();
return null;
}
1.4.2、有了Pager对象, 就需要获取Pager的参数, pageOffset, 这个需要从哪个界面层获取, 通过SystemContext对象获取。ThreadLocal , 不同之间获取数据
package com.chb.spring_hibernate.model;
public class SystemContext {
/**
* 获取offset
*/
private static ThreadLocal pageOffset = new ThreadLocal();
/**
* 获取pageSize, 总页数
*/
private static ThreadLocal pageSize = new ThreadLocal();
/**
* 注意get, set获取, 返回的都是int类型
* @return
*/
public static int getPageOffset() {
return pageOffset.get();
}
public static void setPageOffset(int _pageOffset) {
pageOffset.set(_pageOffset);
}
public static int getPageSize() {
return pageSize.get();
}
public static void setPageSize(int _pageSize) {
pageSize.set(_pageSize);
}
public static void removePageSize() {
pageSize.remove();
}
public static void removePageOffset() {
pageOffset.remove();
}
}
1.4.3、在过滤器中设置值, 创建过滤器SystemContextFilter
package com.chb.spring_hibernate.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.chb.spring_hibernate.model.SystemContext;
public class SystemContextFilter implements Filter{
private int pageSize = 0;
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
int pageOffset = 0;
try {
try {
SystemContext.setPageOffset(Integer.parseInt(req.getParameter("pageOffset")));
} catch (NumberFormatException e) {
e.printStackTrace();
}
SystemContext.setPageOffset(pageOffset);
SystemContext.setPageSize(pageSize);
}finally{
//最终移除
SystemContext.removePageOffset();
SystemContext.removePageSize();
}
chain.doFilter(req, resp);
}
@Override
public void init(FilterConfig cfg) throws ServletException {
try {
pageSize = Integer.parseInt(cfg.getInitParameter("pageOffset"));
} catch (NumberFormatException e) {
//出现异常,初始化pageSize;
pageSize = 10;
}
}
}
1.4.4、在web.xml设置过滤器, 注意必须在Strtus的过滤器之前
/**
* 根据hql, 获取 统计count(*)
* from User ---> select count(*) from User
* select * from User u where u.id = ? ---> select count(*) from User u where u.id=?
* 总结就是将from 前面的替换成 select count(*)
*
* @param hql
* @return
*/
private String getCountHql(String hql) {
String f = hql.substring(0, hql.indexOf("from"));
if (f.equals("")) { //from User
hql = "select count(*)" + hql;
}else {
hql = hql.replace(f, "select count(*) ");
}
return hql;
}
1.5.2.2、获取totalRecord
共${items }记录,共${pageNumber }页,
当前第${curPage }页
首页
上一页
[${pageNumber }]
${pageNumber }
下一页
尾页