一、Pager-taglib简介
   
1、Pager-taglib,支持多种风格的分页显示。实际上她是一个Jsp标签库,为在JSP上显示分页信息而设计的一套标签,通过这些标签的不同的组合,会形成多种不一样的分页页面,风格各异,她自带的DEMO就有八种左右的分页风格(在pager-taglib-2.0.war包下的WEB-INF\jsp
中),包括Google的分页风格。而需要订制自已的风格的分页页面也非常简单。
   2、分页方式有两种:
    一种是:页面分页,即从Action或者其他控制器中得到一个List,在页面上
通过<pg:item>进行自动分页。适合查询结果不大的情况。
    第二种是:数据库分页,即通过把
pageSize,pageNo两参数传给后台进行数据库分页。 适合大量查询。

  
二、
Pager-taglib标签详解

1、<pg:pager>标签分页时我们重点设置的就是这个标签):这个标签用来设置分页的总体参数,重要参数说明:

url:分页的链接根地址,pager标签会在这个链接上附加分页参数pager.offset,后台可根据这个参数分页,
也可自行在URL上添加参数。

items:总记录数,pager标签正是根据这个值来计算分页参数的。在页面分页时,此参数可以不写,后台会自动计算出分页参数。如果你写的话将以你写的为准。

maxPageItems:每页显示的行数,也即每页显示的记录数,默认为10。 不写此标签,你会发现分页的条数在小于10的时候显示不出来一些数据。当大于10的时候则会出现重复的记录!
如:maxPageItems = "4"

maxIndexPages:在循环输出页码的时候,最大输出多少个页码(也就是最多显示多少个页码),默认是10.如:maxIndexPages="3"

export:这个属性比较重要,这个属性是让标签给你暴露什么变量,当然这些变量是有选择的,如在Pager标签里,可以暴露出来的变量有
pageOffset及pageNumber,即页码偏移量及页码。
通过这两个变量名,可以在Jsp或servlet(或者Action)里面从Request里获得。Export属性接受的值还有表达式,

如currentPage=pageNumber表示,把pageNumber的值暴露出来,并赋给一个叫CurrentPage(自定义的)的变量,这个变量将被保存到Request中,在Jsp或servlet中可以得到。通常设为:export="pageOffset,currentPageNumber=pageNumber".这里使用currentPageNumber=pageNumber的原因是pg:pages(不是page)标签输出用于存放每次循环的页码号的变量也叫pageNumber。

scope:将export暴漏出变量,设置器存储范围。取值为:request、session等。默认保存在request范围内。

isOffset:是否允许页面偏移。取值为true、false。如果为true的话,点击页码分页时,分页中的内容是不会有变化的,并且页码可以一直向后延伸(不论是否已到达你的尾页);设为false的话会正常分页。默认false。

index:设置索引页的动态显示方式。取值为:center(默认)、forward、half-full。具体效果自己设置查看。

说明:当我们选择不同的页号,会动态的出现其他页号,我们称之为二级分页。适用于查询结果较多,分页页数也比较多的情况,这时我们有必要对分页页号再进行分页显示。此时我们可以通过设置maxIndexPagesindex两个属性来实现二级分页。

2、<pg:param>:
   

这个标签很有用,用来设置将要加入到URL的参数,将传入后台。使用Name属性指定即可。
  
3、<pg:item>:

    
表示一页中的一项,pager标签库可根据这个项的个数来计算分页参数(pageOffset),通常放在jstl循环中。

  
4、<pg:index>:

   
这个标签说明分页条显示的内容,它可以包含下面这些标记。

 
5、<pg:first>:

   【第一页的标签】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数,即框架暴漏出的参数
pageNumber - 页码
firstItem - 首页第一条记录的索引值
lastItem - 首页最后一条记录的索引值

6、<pg:prev>:
   【上一页标签】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数,即框架暴漏出的参数

pageNumber - 页码

   
7、<pg:next>

   
【下一页标签】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数,即框架暴漏出的参数

pageNumber - 页码

 
8、<pg:last>
重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数,即框架暴漏出的参数

pageNumber - 页码

9、<pg:pages>【这个标签用来循环输出页码信息】重要参数说明:

export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数,即框架暴漏出的参数

pageNumber - 页码
firstItem - pageNumber这个页码指定的那一页的第一行的索引值
lastItem - pageNumber这个页码指定的那一页的最后一行的索引值

 
三、页面分页pager-taglib标签的基本结构

 

 
注意:
<pg:index>标签主要是分页导航的风格,我们可以自定义(如下面示例中的两个风格,其实也是改编自war包中八种风格的jsp文件),也可以使用在pager-taglib-2.0.war包下的WEB-INF\jsp
八种风格的jsp文件,即使用静态导入或者动态导入的方式。如
    
<pg:index>
     
<%@ include
file="/WEB-INF/jsp/google.jsp"%>
    
</pg:index>

<pg:index>
    
<jsp:include page="/WEB-INF/jsp/pager_conn.jsp"
flush="true"></jsp:include>

</pg:index>
 
静态导入前提:两页面合并后一定要能正确编译(即合并后一定要有6中的两个jsp页面指令,合并前这两个指令分散在哪个页面无所谓)

动态导入前提:要包含的风格文件能够独立编译(即一定要导入5中的两个jsp页面指令)
 值得注意的是:八种风格的jsp文件必须拷到/WEB-INF/jsp/目录下,并且每个jsp文件中的jsp动作指令标签(如<jsp:useBean
>) 要删除。

呵呵,有了这些,我们分页的重点就是设置pg:pager标签的总体属性啦

  四、Pager-taglib页面分页示例

 
1、导入
pager-taglib.jar到类路径下

到官网http://jsptags.com/tags/navigation/pager/index.jsp下载pager-taglib-2.0.war。

在pager-taglib-2.0.war包下的WEB-INF\jsp
中包含了此框架默认的8中分页风格。
   2、新建实体类Book.java
    package
entity;
public class Book
{
    private
String name;
    private
float price;
    public
Book()
    {
   
    // TODO
Auto-generated constructor stub
    }
    public
Book(String name,float price)
    {
   
   
this.setName(name);
   
   
this.setPrice(price);
    }
    public
String getName()
    {
   
    return
name;
    }
    public void
setName(String name)
    {
   
    this.name =
name;
    }
    public float
getPrice()
    {
   
    return
price;
    }
    public void
setPrice(float price)
    {
   
    this.price =
price;
    }
}
 3、新建控制器PagerServlet.java
   public class PagerServlet
extends HttpServlet
{
    public void
doGet(HttpServletRequest request, HttpServletResponse
response)
   
   
    throws
ServletException, IOException
    {

doPost(request, response);
    }
   
    public void
doPost(HttpServletRequest request, HttpServletResponse
response)
   
   
    throws
ServletException, IOException
    {

response.setContentType("text/html; charset=utf-8");
   
    PrintWriter
out = response.getWriter();
   
   
List<Book> books=null;
   
   
if(books==null)
   
    {
   
   
 books = new
ArrayList<Book>();
   
    Book b1 =
new Book("物理1", 15);
   
    Book b2 =
new Book("物理10", 10);
   
    Book b3 =
new Book("物理9", 20);
   
    Book b4 =
new Book("物理8", 30);
   
    Book b5 =
new Book("物理7", 40);
   
    Book b6 =
new Book("物理6", 50);
   
    Book b7 =
new Book("物理5", 60);
   
    Book b8 =
new Book("物理4", 70);
   
    Book b9= new
Book("物理3", 80);
   
    Book b10 =
new Book("物理2", 90);
   
   
books.add(b10);
   
   
books.add(b9);
   
   
books.add(b8);
   
   
books.add(b7);
   
   
books.add(b6);
   
   
books.add(b5);
   
   
books.add(b4);
   
   
books.add(b3);
   
   
books.add(b2);
   
   
books.add(b1);
   
   
request.getSession().setAttribute("books", books);
   
    }
   
   
//页面翻页的普通样式
   
   
request.getRequestDispatcher("/book_list_comm.jsp").forward(request,
response);
   
   
//谷歌样式的页面翻页
   
   
//request.getRequestDispatcher("/book_list_google.jsp").forward(request,
response);
   
   
out.flush();
   
   
out.close();
    }
}
 3、在web.xml中配置PagerServlet.java

  
<servlet>
   
<description>分页控制器</description>

<servlet-name>PagerServlet</servlet-name>

<servlet-class>servlet.PagerServlet</servlet-class>

</servlet>
 
<servlet-mapping>
   
<servlet-name>PagerServlet</servlet-name>

<url-pattern>/PagerServlet</url-pattern>

</servlet-mapping>
4、新建普通风格分页页面(核心部分)book_list_comm.jsp(最重要)
<%@taglib
uri="http://java.sun.com/jsp/jstl/core" prefix="c"
%>
<%@taglib
uri="http://jsptags.com/tags/navigation/pager" prefix="pg"
%>

body元素中添加:
 <pg:pager
url="book_list_comm.jsp" maxPageItems
= "3" maxIndexPages="3"
export="offset,currentPageNumber=pageNumber"
isOffset="false" 
index="half-full" 
>  

<table width="778" border="0"
cellPadding="0" cellSpacing="1"
bgcolor="#6386d6">

<tr
bgcolor="#EFF3F7">

<TD
align="center">书名</TD>

<TD
align="center">价格</TD>

</tr>

<c:if test="${!empty
books}">  
         
<c:forEach items="${books}"
var="book">
         
<pg:item>

<tr
bgcolor="#EFF3F7">

<td align="center">${book.name
}</td>

<td align="center">${book.price
}</td>

</tr> 
           
</pg:item>  

</c:forEach>

</c:if>

<c:if test="${empty
books}">  
        
<tr>

<td colspan="5" align="center"
bgcolor="#EFF3F7">

没有找到相应的记录  
           
</td>

</tr>

</c:if>

</table>

<%-- 定义分页风格:普通风格
--%>

<pg:index>
 
<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:index>

</pg:pager>  

 
5、新建谷歌风格的分页界面(核心部分):book_list_google.jsp(最重要)

<%@taglib
uri="http://java.sun.com/jsp/jstl/core" prefix="c"
%>
<%@taglib
uri="http://jsptags.com/tags/navigation/pager" prefix="pg"
%>

<pg:pager url="book_list_google.jsp" 
index="half-full" export="currentPageNumber=pageNumber"
maxPageItems="3" maxIndexPages="3">

<table width="778" border="0" cellPadding="0"
cellSpacing="1"
bgcolor="#6386d6">

<tr
bgcolor="#EFF3F7">

<TD
align="center">书名</TD>

<TD
align="center">价格</TD>

</tr>

<c:if test="${!empty
books}">  
         
<c:forEach items="${books}"
var="book">
         
<pg:item>

<tr
bgcolor="#EFF3F7">

<td align="center">${book.name
}</td>

<td align="center">${book.price
}</td>

</tr> 
           
</pg:item> 

</c:forEach>

</c:if>

<c:if test="${empty
books}">  
        
<tr>

<td colspan="5" align="center"
bgcolor="#EFF3F7">

没有找到相应的记录  
           
</td>

</tr>

</c:if>

</table>

<%--定义风衣风格:谷歌风格
--%>
    
 <%-- 
使用静态导入谷歌风格 (如不理解,请参考标题三)
            
<pg:index>
       
   
 <%@ include
file="/WEB-INF/jsp/google.jsp"%>
            
</pg:index>
        
--%> 

<pg:index>
     
<center>
     
<table border=0 cellpadding=0 width=10%
cellspacing=0>
     
<tr align=center valign=top>
     
<td
valign=bottom><font
face=arial,sans-serif 
       
size=-1>Result Page:
</font></td>

<pg:prev ifnull="true">
       
<% if (pageUrl != null) { %>
         
<td align=right><A
HREF="<%= pageUrl
%>"><IMG
           
SRC=http://www.google.com/nav_previous.gif alt=""
border=0><br>
         
<b>Previous</b></A></td>

<% } else { %>
         
<td><IMG
SRC=http://www.google.com/nav_first.gif alt=""
border=0></td>
       
<% } %>
     
</pg:prev>
     
<pg:pages>
       
<% if (pageNumber == currentPageNumber) {
%>
         
<td><IMG
SRC=http://www.google.com/nav_current.gif
alt=""><br>
         
<font
color=#A90A08><%= pageNumber
%></font></td>

<% } else { %>
         
<td><A
HREF="<%= pageUrl
%>"><IMG
           
SRC=http://www.google.com/nav_page.gif alt=""
border=0><br>
         
<%= pageNumber
%></A></td>

<% } %>
     
</pg:pages>
     
<pg:next ifnull="true">
       
<% if (pageUrl != null) { %>
         
<td><A
HREF="<%= pageUrl
%>"><IMG
           
SRC=http://www.google.com/nav_next.gif alt=""
border=0><br>
         
<b>Next</b></A></td>

<% } else { %>
         
<td><IMG
SRC=http://www.google.com/nav_last.gif alt=""
border=0></td>
       
<% } %>
     
</pg:next>
     
</tr>
     
</table>
     
</center>
   
</pg:index>
  
</pg:pager>
在浏览器中输入:http://localhost:8888/Pager-taglib/PagerServlet

可以看到两种分页风格的的分页:
普通风格:

谷歌风格:

分页技术框架(Pager-taglib)学习一(页面分页)的更多相关文章

  1. 分页技术框架(Pager-taglib)学习二(SSH数据库分页)

    一.Pager-taglib数据库分页前提    Pager-taglib分页标签也可以实现数据库分页,与页面分页不同的是需要给后台传两个参数,一个是pageNo(当前页数)或pageOffset(偏 ...

  2. 分页技术框架(Pager-taglib)学习三(pager-taglib中传递参数时中文乱码问题)

    一.问题描述 问题: 使用<pg:param name="key" />标签传递中文参数时,会有乱码. 原因: 因为它默认是用gb2312来对添加的参数进行编码,如果你 ...

  3. 基于asp.net + easyui框架,一步步学习easyui-datagrid——实现分页和搜索(二)

    http://blog.csdn.net/jiuqiyuliang/article/details/19967031 目录: 基于asp.net + easyui框架,一步步学习easyui-data ...

  4. Mysql学习总结(32)——MySQL分页技术详解

    1.什么是数据分页:数据分页就是将很多条记录像书本一样分页,每页显示多少行记录: 2.为什么要数据分页:当我们进行sql语句查询时,假如数据有成千上万行记录,如果在同一个页面去显示,那这个页面得有多大 ...

  5. 广告域名审核之后跳转技术:点击域名A页面iframe框架下的链接,域名A跳转到域名B

    广告域名审核之后跳转技术:点击域名A页面iframe框架下的链接,域名A跳转到域名B注:域名B为afish.cnblogs.com 域名A页面代码:<!DOCTYPE html PUBLIC & ...

  6. MVC如何使用开源分页插件shenniu.pager.js

    最近比较忙,前期忙公司手机端接口项目,各种开发+调试+发布现在几乎上线无问题了:虽然公司项目忙不过在期间抽空做了两件个人觉得有意义的事情,一者使用aspnetcore开发了个人线上项目(要说线上其实只 ...

  7. SAP UI 搜索分页技术

    搜索分页技术往往和另一个术语Lazy Loading(懒加载)联系起来.今天由Jerry首先介绍S/4HANA,CRM Fiori和S4CRM应用里的UI搜索分页的实现原理.后半部分由SAP成都研究院 ...

  8. Javaweb 第15天 web练习和分页技术

    第15天 web练习和分页技术 复习day14内容: 学习新技术的思路? 分析功能的思路? 使用queryRunner操作数据库的步骤? ResultSetHandler接口常用实现类(三个重点)? ...

  9. Bootstrap学习-导航条-分页导航

    1.导航条基础 导航条(navbar)和上一节介绍的导航(nav),就相差一个字,多了一个“条”字.其实在Bootstrap框架中他们还是明显的区别.在导航条(navbar)中有一个背景色.而且导航条 ...

随机推荐

  1. iOS:quartz2D绘图

    Quartz-2D:绘图 一.介绍: •Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境   •Quartz 2D API可以实现许多功能,如基于路径的绘图.透明度.阴影 ...

  2. Wishbone接口通用RAM

    /* ************************************************************************************************ ...

  3. 利用PMKID破解PSK的实际测试与影响评估

    在2018年8月4日,一位研究员在hashcat论坛中发布了一篇帖子,表示他研究WPA3协议密码破解方法的过程中,发现了一个针对WPA/WPA2协议密码破解的新方法,使用PMKID(the Pairw ...

  4. go语言基础之匿名变量和多重赋

    1.匿名变量 package main //必须有一个main包 import "fmt" func test() (a, b, c int) { return 1, 2, 3 } ...

  5. screen space shadowmap unity

    unity用到了screen space shadow map 1.camera 在light pos 生成depth1 2.screen space depth2 3.根据depth1 depth2 ...

  6. 深度增强学习--DQN的变形

    DQN的变形 double DQN prioritised replay dueling DQN

  7. 关于typedef的用法总结(zz)

    不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多 的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一 ...

  8. Tomcat 访问 Manager App,Host Manager

     1.启动tomcat,在浏览器输入:http://localhost:8080/ 2.配置tomcat-users.xml 文件 在主目录的cong文件夹下找到tomcat-users.xml 文件 ...

  9. scala 内部类

    scala内部类不同于java内部类, java类中内部类从属于外部类,而scala的内部类从属于外部类对象 /** * 第一种方式 * 在内部类通过 外部类.this.成员名称 访问外部类成员 */ ...

  10. mr程序无法输出日志进行调试的解决方法

    mr程序无法输出日志进行调试的解决方法 @(Hadoop) yarn开启日志输出设置 在yarn-site.xml文件中添加如下配置: <property> <name>yar ...