关于分页组件pager-taglib的一些代码分享

来源:互联网 发布:手机抢拍软件 编辑:程序博客网 时间:2024/05/16 10:27

第一步.使用该分页组件需要导入pager-taglib.jar包。

第二步.在jsp页面中导入标签<%@taglib uri="http://jsptags.com/tags/navigation/pager" prefix="pg"%>

第三部.复制代码如下

<pg:pager items="${pm.totalRows}"maxPageItems="${pm.pageSize}" maxIndexPages="20"export="currentPageNumber=pageNumber"url="User_findAllUser.action"><pg:param name="pid" /><pg:first><a href="${pageUrl}">首页</a></pg:first><pg:prev><a href="${pageUrl}">前页</a></pg:prev><pg:pages><c:choose><c:when test="${currentPageNumber eq pageNumber}"><font color="red">${pageNumber }</font></c:when><c:otherwise><a href="${pageUrl}">${pageNumber }</a></c:otherwise></c:choose></pg:pages><pg:next><a href="${pageUrl}">下页</a></pg:next><pg:last><a href="${pageUrl}">尾页</a></pg:last></pg:pager>
第四步:新建一个分页工具类PageUtil来保存页面中分页组件传递过来的参数。

public class PageUtil {//线程本地变量 查询开始位置private static ThreadLocal<Integer> offsetTL=new ThreadLocal<Integer>();//线程本地变量 每页多少条private static ThreadLocal<Integer> pageSizeTL=new ThreadLocal<Integer>();public static void setOffset(int offset){offsetTL.set(offset);}public static void setPageSize(int pageSize){pageSizeTL.set(pageSize);}public static int getOffset(){return offsetTL.get();}public static int getPageSize(){return pageSizeTL.get();}public static void removePageSize(){pageSizeTL.remove();}public static void removeOffset(){offsetTL.remove();}}

第五部:新建一个实体类分页模型

import java.util.List;/** * 分页模板实体类 * @author 王伟 * * @param <E> */public class PageModel<E> {private List<E> dataList;private int totalRows;private int pageSize;public List<E> getDataList() {return dataList;}public void setDataList(List<E> dataList) {this.dataList = dataList;}public int getTotalRows() {return totalRows;}public void setTotalRows(int totalRows) {this.totalRows = totalRows;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}}


第六步:编写一个设置分页参数的过滤器PageFilter

public void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {String offsetStr=req.getParameter("pager.offset");if(offsetStr!=null){PageUtil.setOffset(Integer.parseInt(offsetStr));}else{PageUtil.setOffset(0);}PageUtil.setPageSize(10);chain.doFilter(req, resp);PageUtil.removeOffset();PageUtil.removePageSize();}
第七部:将分页过滤器配置到web项目中

<filter><filter-name>PageFilter</filter-name><filter-class>com.elisoft.wechat.filter.PageFilter</filter-class></filter><filter-mapping><filter-name>PageFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
第八步:根据PageUtil查询数据库获取数据,我自己项目使用的是持久层框架hibernate

//分页查询用户@SuppressWarnings("unchecked")public PageModel<User> findUser() {String hql="from User u where u.userName is not null ";Query query =this.getSession().createQuery(hql).setFirstResult(PageUtil.getOffset()).setMaxResults(PageUtil.getPageSize());List<User> userList=query.list();PageModel<User> pm=new PageModel<User>();pm.setPageSize(PageUtil.getPageSize());pm.setDataList(userList);hql="select count(*) "+getHQL(hql);query=this.getSession().createQuery(hql);long rows=(Long)query.uniqueResult();pm.setTotalRows((int)rows);return pm;}private String getHQL(String hql){int index=hql.indexOf("from");if(index==-1){index=hql.indexOf("FROM");}return hql.substring(index);}

如果是纯jdbc如mysql数据库可以在sql查询语句后面加上limit ?,?;第一个?表示从哪个位置开始查询,第二个?表示查询条数因此第一个位置应该是PageUtil.getOffset(),第二个位置是PageUtil.getPageSize();

至此,分页模型基本完成。


0 0
原创粉丝点击