java分页工具 pager-taglib

 
 

pager-taglib是一个用jsp标签库实现分页的工具,在它的demo中有实现好的各种常见分页方式,使用时只需pager-taglib.jar包即可,Pager会在给出的URL后面加上"?page.offset="来标识当前偏移量,使用时在jsp页面将pager-taglib的标签库引入:

<%@ taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager" %>

标签介绍<pg:pager>:一切子标签都在它里面工作

<pg:pager  items="int" maxItems="int" maxPageItems="int" maxIndexPages="int"  export="expression" scope="page|request" 省略>

items:总记录数maxPageItems:每页显示的行数,默认为10maxIndexPages:最大输出的页码数export:这个属性是让标签给你暴露什么变量,当然这些变量是有选择的,如在Pager标签里,可以暴露出来的变量有pageOffset及pageNumber(参见文档),即页码偏移量及页码。通过这两个变量名,可以在Jsp或Java里面从Request里获得。 Export属性接受的值还有表达式,如currentPage=pageNumber表示,把pageNumber的值暴露出来,并赋给一个叫 CurrentPage的变量,这个变量将被保存到Request中,在Jsp或Java中可以得到。scope:有Reuqest、page可选。<pg:param>设置加入到URL的参数如  <pg:param name=" pagesize " value="5" />

pg:first 首页标签可以导出的值: pageUrl - 分页链接URL地址    pageNumber - 页码   firstItem - 首页第一行的索引值   lastItem - 首页最后一行的索引值pg:pre上一页pg:next下一页pg:last 尾页pg:pages 循环输出页码 

下面是一个示例:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>title</title>
</head>
<body>
<!-- 每个标签可以导出的值参见文档 ,没有的可以用export导出 ,但用export的值也有规定--> 
<pg:pager items="1000" maxPageItems="10" maxIndexPages="7" export="number"><!-- export可以使用表达式: curpage=number,这样 curpage就相当于number -->
<%=number %>
	<pg:first>
		<a href="<%=pageUrl %>">首页[<%=pageNumber %>]</a><!-- pageNumber导出当前页的值 -->
	</pg:first>
	<pg:prev>
		<a href="<%=pageUrl %>">上一页</a>	
	</pg:prev>
	<pg:pages>
	<%if(number==pageNumber){ %>
		[<%=pageNumber %>]
	<%} else { %>
		<a href="<%=pageUrl %>">[<%=pageNumber %>]</a> <!-- pageUrl pageNumber导出值 -->
	<%} %>
	</pg:pages>
	<pg:next>
		<a href="<%=pageUrl %>">下一页</a>
	</pg:next>
	<pg:last>
		<a href="<%=pageUrl%>">尾页</a>
	</pg:last>
</pg:pager>
</body>
</html>

运行结果:


链接地址:http://localhost:8080/msg/testPager.jsp?pager.offset=50

pager-taglib传值 乱码:

首先确定不是因为平时url乱码所致(手动设置接收的参数String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8")可解决)

pager-taglib使用的是jdk默认的编码,所以传中文时会出现乱码,要重新修改编译源代码可以解决:
建立普通的java project命名为pager-taglib,将源码解压后的两个文件拷贝到src下,注意将taglib.tld拷到META-INF下,修改在comjsptagsnavigationpager下面的PagerTag的addParam(String name, String value)中,它原本是采用的URLEncoding.encode(value)方式来对传递的参数进行编码的,修改成为 URLEncoding.encode(value, "UTF-8"),打成jar包即可用

下面是一个实际应用的例子:

Pager.java

public class Pager<E> {

	private int pageSize;//每页显示多少条
	private int pageOffset;//分页的开始值
	private int totalRecord;//总共多少条记录
	private int totalPage;//总共多少页
	private List<E> datas;//放置具体数据的列表

	//省略getter setter

}

DAO层:

public Pager<User> list(String condition) {
		int pageOffset = SystemContext.getPageOffset();
		int pageSize = SystemContext.getPageSize();
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		Pager<User> pages = new Pager<User>();
		List<User> users = new ArrayList<User>();
		User u = null;
		try {
			con = DBUtil.getConnection();
			String sql = "select * from t_user";
			String sqlCount = "select count(*) from t_user";
			if(condition!=null||!"".equals(condition)) {
				sql+=" where username like '%"+condition+"%' or nickname like '%"+condition+"%'";
				sqlCount+=" where username like '%"+condition+"%' or nickname like '%"+condition+"%'";
			}
			sql+=" limit ?,?";
			ps = con.prepareStatement(sql);
			ps.setInt(1, pageOffset);
			ps.setInt(2, pageSize);

			rs = ps.executeQuery();
			while(rs.next()) {
				u = new User();
				u.setId(rs.getInt("id"));
				u.setNickname(rs.getString("nickname"));
				u.setUsername(rs.getString("username"));
			}
			ps = con.prepareStatement(sqlCount);
			rs = ps.executeQuery();
			int totalRecord = 0;
			while(rs.next()) {
				totalRecord = rs.getInt(1);
			}
			int totalPage = (totalRecord-1)/pageSize+1;
			pages.setPageOffset(pageOffset);
			pages.setPageSize(pageSize);
			pages.setTotalPage(totalPage);
			pages.setTotalRecord(totalRecord);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.close(rs);
			DBUtil.close(ps);
			DBUtil.close(con);
		}
		pages.setDatas(users);
		return pages;
	}

分页部分pager.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager" %>
<%
	int items = Integer.parseInt(request.getParameter("items"));
	String params = request.getParameter("params"); //con
	String v="";
	if(params==null) params="";
	if(request.getParameter(params)!=null)
		v=new String(request.getParameter(params).getBytes("ISO-8859-1"),"utf-8") ;
%>
<pg:pager maxPageItems="15" items="<%=items%>" export="curPage=pageNumber">

	<pg:param name="<%=params %>" value="<%=v %>"/>

<pg:last>
共<%=items %>记录,共<%=pageNumber %>页,
</pg:last>
当前第<%=curPage %>页
<pg:first>
	<a href="<%=pageUrl%>">首页</a>
</pg:first>
<pg:prev>
	<a href="<%=pageUrl%>">上一页</a>
</pg:prev>
<pg:pages>
<%
	if(curPage==pageNumber) {
%>
	[<%=pageNumber%>]
<%		
	} else {
%>
	<a href="<%=pageUrl %>"><%=pageNumber %></a>		
<%		
	}
%>
</pg:pages>
<pg:next>
	<a href="<%=pageUrl %>">下一页</a>
</pg:next>
<pg:last>
	<a href="<%=pageUrl%>">尾页</a>
</pg:last>
</pg:pager>

在显示数据部分只要调用pager.jsp.传值即可

 

介绍那么多,学习这个工具折腾的时间,个人觉得还不如自己花些时间去写一段通用的代码或者打包成jar,自定义一些标签。

 

你可能感兴趣的:(java分页工具 pager-taglib)