分页标签:pager-taglib的使用
2016-03-26 14:43
465 查看
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:每页显示的行数,默认为10
maxIndexPages:最大输出的页码数
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>
下面是一个实际应用的例子:
Pager.java
[java] view plain copy
public class Pager<E> {
private int pageSize;//每页显示多少条
private int pageOffset;//分页的开始值
private int totalRecord;//总共多少条记录
private int totalPage;//总共多少页
private List<E> datas;//放置具体数据的列表
//省略getter setter
}
DAO层:
[java] view plain copy
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:
[html] view plain copy
<%@ 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>
<%@ 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:每页显示的行数,默认为10
maxIndexPages:最大输出的页码数
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>
下面是一个实际应用的例子:
Pager.java
[java] view plain copy
public class Pager<E> {
private int pageSize;//每页显示多少条
private int pageOffset;//分页的开始值
private int totalRecord;//总共多少条记录
private int totalPage;//总共多少页
private List<E> datas;//放置具体数据的列表
//省略getter setter
}
DAO层:
[java] view plain copy
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:
[html] view plain copy
<%@ 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>
相关文章推荐
- mysql 相关问题解决
- 【BZOJ2157】旅游,树链剖分练习
- 关于vxworks工程迁移到另外电脑里,wind river workbench编译报错
- 求数组中出现次数大于数组长度一半的元素
- Hadoop在线水平增加删除datanode
- MySQL数据记录基本操作——添加数据、更新数据和删除数据
- 弦月下的SQL<8> SQL存储过程和触发器代码
- Java多线程之volatile变量
- calico docker 应用实例
- PAT (Advanced Level) Practise 1103 Integer Factorization (30)
- Multi-layer Perceptron
- 第4周项目1 求最大公约数
- 必须知道的十二大著名法则
- js删除数组里的某个元素
- 那么蒙特卡洛树搜索(Monte Calro Tree Search, MCTS)究竟是啥
- POJ 1195 Mobile phones(二维树状数组)
- 优化数据库的吞吐量
- spring学习笔记(24)基于注解配置事务
- SGU414 Orthogonal Circles
- codevs 1041 Car 的旅行路线 最短路+代码能力