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


第一步.使用该分页组件需要导入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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值