以前写的那个[jsp中实现分页显示数据] 方法不通用,得找个分页标签。关于pager-taglib的使用方法网上虽说一大堆,但是同样费我不少脑细胞去看。有的代码不齐全,有的根本就是错误的,有的写的很潦草,看的我是云里雾里的,经过本人耗费大量的脑细胞奋战N个小时终于搞出了点猫腻。
想明白了,写出来运行成功了,我才发现其实用法很简单,没那些人写的那么麻烦。
首先当然还是要导pager-taglib.jar包了,可以去http://jsptags.com/tags/navigation/pager/index.jsp下载,从下载下来的war文件中找到pager-taglib.jar包以及pager-taglib.tld文件。将pager-taglib.tld文件放在WEB-INF目录下,将pager-taglib.jar放在WEB-INF/lib目录下(JBuilder中的导入方法可以参考[Servlet中实现文件上传] )。
新建一个bean文件定义如下两个方法(不一定非要这个样子):
- /**
- * 该方法用于获得数据总数
- * @return int
- */
- public int getArticlesCount() {
- String sql = "SELECT COUNT(*) FROM blog_Article";
- dbc = new DataSource();
- stmt = dbc.getPreparedStatement(sql);
- rs = dbc.getResultSet(stmt);
- int count = 0;
- try {
- if(rs.next()){
- count = rs.getInt(1);
- }
- } catch (SQLException ex) {
- ex.printStackTrace();
- } finally {
- dbc.closeConnection();
- }
- return count;
- }
- /**
- * 该方法用于数据分页
- * @param begin int
- * @param end int
- * @return ArrayList
- */
- public ArrayList getArticlesAll(int begin,int end) {
- String sql = "select top "+end+" * from blog_Article where (log_ID <= (select min(log_ID) from (select top "+begin+" log_ID from blog_Article order by log_PostTime desc) as t)) order by log_PostTime desc";
- ArrayList list = new ArrayList();
- dbc = new DataSource();
- stmt = dbc.getPreparedStatement(sql);
- rs = dbc.getResultSet(stmt);
- try {
- while (rs.next()) {
- ArticleBean article = new ArticleBean();
- article.setId(rs.getInt(1));
- //赋值操作…
- article.setTag(rs.getString(10));
- article.setIsTop(rs.getByte(11));
- list.add(article);
- }
- } catch (SQLException ex) {
- ex.printStackTrace();
- } finally {
- dbc.closeCon
nection(); - }
- return list;
- }
接下来新建一个JSP页面(需要JSTL):
- <%@ page contentType="text/html; charset=GBK" import="java.util.*,com.nkblog.bean.ArticleBean,com.nkblog.dbc.*" %>
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
- <%@ taglib uri="WEB-INF/pager-taglib.tld" prefix="pg" %>
- <%
- request.setCharacterEncoding("GBK");
- String offset = request.getParameter("pager.offset");//pager.offset为此分页标签内置变量用于传递页数
- int page = 0;
- if(offset == null){
- //若offset为null则是第一次访问,所以显示第一页
- page= 1;
- }else{
- //反之,则按照传递来的页数来分
- page = Integer.parseInt(offset)+1;
- }
- //获取数据总数
- int dataTotal = ArticleManager.getArticlesCount();
- //查询分页数据,10为每页要显示的数据量,可自定义
- ArrayList articles = ArticleManager.getArticlesAll(page,10);
- %>
- <%
- for(int i=0;i<articles.size();i++)
- {
- //输出取出的10条数据…
- }
- %>
- <pg:pager scope="request" maxIndexPages="5" index="center" maxPageItems="10" url="index.jsp" items="<%=dataTotal%>" %>" export="currentPageNumber=pageNumber">
- <pg:first><a href="${pageUrl}">首页</a></pg:first>
- <pg:prev><a href="${pageUrl}">前页</a></pg:prev>
- <pg:page>
- </pg:page>
- <pg:pages>
- <c:choose>
- <c:when test="${pageNumber eq currentPageNumber }">
- <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>
接下来具体说明上面的分页标签<pg:pager>
maxIndexPages为分页条个数,形如:< << 1 2 3 4 5 >> >
maxPageItems为每页要显示的数据量
url为处理分页请求的文件,可以是JSP或Servlet。当程序运行起来后,会以index.jsp?pager.offset=5的形式传递页数。
items为数据总数,pager-taglib会自动根据以上参数进行分页。
需要进行修改的也就上面这几个参数,起初看别人写的方法,我以为只要导入这个标签然后给定一个List数据集合,它就完全自动的跟也并显示数据了,汗~~也不知道我这么写会有几个看得懂的,估计懂的人有,但是能看明白我写的就少了…我发现原来代码写起来简单,但是要给别人将明白了真的好难啊。
-------------------------------
1、<pg:pager>,在这个标签库里就充当着一个领袖的作用,一切子标签都在它里面工作。就以上出现的参数进行解释一下:
items:数据的纪录数
index:说起来比较麻烦,反正是一次大跳跃之后,当前页面在各个页数的什么位置,默认为Center,不动也罢了。
maxPageItems:显示最多的纪录数/页
maxIndexPages:显示最多的分页数/次,如设为5的话,则会出现这样的情况 1 2 3 4 5 .或 3 4 5 6 7 这样的形式,其实她自带的DEMO都喜欢把页数展现出来排成一排。
isOffset:与pg:item配套使用,页pg:item基本上被我淘汰出局。
export:这个属性比较重要,文档也对此作好相对长篇幅的说明。这个属性是让标签给你暴露什么变量,当然这些变量是有选择的,如在Pager标签里,可以暴露出来的变量有pageOffset及pageNumber,即页码偏移量及页码。通过这两个变量名,可以在Jsp或Java里面从Request里获得。Export属性接受的值还有表达式,如currentPage=pageNumber表示,把pageNumber的值暴露出来,并赋给一个叫CurrentPage的变量,这个变量将被保存到Request中,在Jsp或Java中可以得到。
scope:咳。还需要讲么?
2、<pg:param>这个标签很有用,用来设置将要加入到URL的变量。使用Name属性指定即可。
3、<pg:index>这个标签说明分页显示开始了。跳进我们Include的页面。再看看详细的情况。
----------------------------------------
参考资料:
http://jsptags.com/tags/navigation/pager/index.jsp Pager-taglibs官网
http://www.springside.org.cn/ SpringSide 春天的旁边(需要我们的参与)