1、需求
为更好的完成分页功能,简化实际开发中前后台交互的分页操作。
2、简介
分页组件共有三个类和一个标签描述文件(pager-tag.tld),各类的简介如下:
Pager类:分页工具类,封装后台数据以便前台使用。
LinkScope类:页码连接范围类,记录了对应页面的开始页码和结束页码,辅助Pager类完成页码连接部分。
PagerTag 类:分页标签处理类,处理分页数据连接部分的展示,并输出到标签应用页面。
3、 LinkScope类
公有属性(对外提供get、set方法):
private int startIndex; // 连接页开始页码
private int endIndex; // 连接页结束页码
其它属性(类内部使用,对外只提供get方法):
private int linkSize; // 页码连接数
private int beforeNum; // 当前页之前的页数
private int afterNum; // 当前页之后的页数
构造方法:
/**
* 以默认页码连接数构造一个页码连接范围对象。
*
* <tt>其中,默认页码连接数为10。</tt>
*/
public LinkScope() {...}
/**
* 以指定的页码连接数构造一个页码连接范围对象。
*
* @param linkSize
* 页码连接数,若参数值不大于-1,则使用默认值10。
*/
public LinkScope(int linkSize) {...}
/**
* 以指定的当前页之前、之后的页数构造一个页码连接范围对象。
*
* @param beforeNum
* 当前页之前的页数。
* @param afterNum
* 当前页之后的页数。
*
*/
public LinkScope(int beforeNum, int afterNum) {...}
注意:
1、只有正确设置了linkSize或beforeNum、afterNum,该对象的数据才算合格,而且两组数据只需设置其中一组即可,另一组数据将自动计算得到。(无效参数举例:linkSize==0或beforeNum+afterNum==0)
2、无需手动设置属性startIndex、endIndex的值,并且手动设置的值在应用到Pager类中时会失效。
3、当beforeNum+afterNum<0,在应用到PagerTag类中,并且当前对象未失效时,执行倒序排列,其它时候顺序排列。
4、 Pager类
公有属性(对外提供get、set方法):
private int pageIndex; // 当前页码
private int pageSize; // 页面大小
private List items; // 数据集合
private int totalRows; // 数据总量,总记录数
private LinkScope linkScope; // 页码连接范围对象
private boolean firstPage = false; // 是否仅取第一页, 默认为false。
private boolean supplement = true; // 是否进行前后页序号动态补足,默认为true。
其它属性(类内部使用,对外只提供get方法):
private int totalPage; // 页面总量,总分页数
private int pastRows; // 当前页之前的数据量
private int previousPage; // 上一页页码
private int nextPage; // 下一页页码
private boolean ready = false; // 是否可以工作。默认为false,只有正确设置了数据总量才为true。
private boolean goodState = false; // linkScope关键数据的准备状态, 默认为false。
构造方法:
/**
* 以默认当前页码、页面大小构造一个分页对象。
*
* <tt>其中,默认当前页码为1,默认页面大小为10。</tt>
*/
public Pager() {...}
/**
* 以指定的当前页码、页面大小构造一个分页对象。
*
* @param pageIndex
* 当前页码,若参数值不大于0,则使用默认值1。
* @param pageSize
* 页面大小,若参数值不大于0,则使用默认值10。
*/
public Pager(int pageIndex, int pageSize) {...}
/**
* 以指定的当前页码、页面大小构造一个分页对象。
*
* @param pageIndex
* 当前页码,若参数值不大于0,则使用默认值1。
* @param pageSize
* 页面大小,若参数值不大于0,则使用默认值10。
* @param linkSize
* 页码连接数,如果设置了此参数,将用此创建一个LinkScope对象并设置。
* 若参数值不大于-1,则使用默认值10;若参数值为0,则此参数视为无效参数。
*/
public Pager(int pageIndex, int pageSize, int linkSize) {...}
静态实例:
/**
* 以指定的页面大小构造一个表示第一页的分页对象。
*
* @param pageSize
* 页面大小,若参数值不大于0,则使用默认值10。
* @return 构造好的第一页分页对象。
*/
public static Pager newFirstPager(int pageSize) {...}
注意:
1、只有正确设置了totalRows,则totalPage,pastRows,previousPage,nextPage数据才经计算后一并设置;如果linkScope的数据合格,并且ready的值为true,则在初次调用getLinkScope()获得linkScope时,计算其属性startIndex、endIndex的值并设置。
2、当firstPage的值为true时,设置totalRows将失效。当使用newFirstPager(int pageSize)方法获得Pager实例时,默认设置firstPage的值为true。
5、PagerTag类
此类为标签处理类,只详解其标签描述文件pager-tag.tld相关的内容。
private String homePage; // 首页显示内容
private String lastPage; // 末页显示内容
private String previousPage; // 上一页显示内容
private String nextPage; // 下一页显示内容
private int beforeNum; // 当前页之前的页数
private int afterNum; // 当前页之后的页数
private Pager pager; // 分页对象
private String url; // 链接地址
private String pageIndex; // 当前页码参数名称
private String pageSize; // 页面大小参数名称
private String divClass; // 外层div样式
private boolean display = true; // 是否显示页码连接范围,默认为true。
private boolean supplement = true; // 是否进行前后页序号动态补足,默认为true。
private boolean vertical = false; // 是否纵向排列,默认为false。
注意:
1、pager,url,pageIndex为关键属性,必须设置值,pageIndex为空值时给予默认值“pageIndex”。
2、只有正确设置了beforeNum、afterNum,并且display的值为true,则重新构造linkScope并设置,对象pager中原来的linkScope将失效。
3、当beforeNum+afterNum<0时,执行倒序排列,其它时候顺序排列。
6、测试举例
测试主代码:
Pager pager = new Pager(17, 5, 8);
pager.setTotalRows(1000);
System.out.println(pager);
System.out.print("[首页]" + pager.getHomePage());
System.out.print("[上一页]" + pager.getPreviousPage());
System.out.print("[下一页]" + pager.getNextPage());
System.out.println("[末页]" + pager.getLastPage());
System.out.println(pager.getLinkScope());
控制台输出结果:
class commons.util.Pager[pageIndex=17, pageSize=5, totalRows=1000, ready=true, goodState=false]
[首页]1[上一页]16[下一页]18[末页]200
Link scope information of the page is: 14 to 21
7、 标签使用举例
1、 配置(两种方式,任选其一,推荐使用归档文件)
使用源代码:
需将pager-tag.tld文件放到WEB-INF下,并在web.xml中配置如下:
<jsp-config>
<taglib>
<taglib-uri>pagerTag</taglib-uri>
<taglib-location>/WEB-INF/pager-tag.tld</taglib-location>
</taglib>
</jsp-config>
使用.jar归档文件:
无需在web.xml中配置,只需将pager-tag-1.0.jar文件引入项目中使用即可。
2、 分页页面调用
//引入pager-tag.tld文件的定义
<%@ taglib prefix="util" uri="http://www.codingfarmer.com/tags"%>
//分页显示
<util:pagerTag pager="${pager}" url="www.iteye.com?type=1" pageIndex="index" pageSize="size" homePage="首页" lastPage="末页" previousPage="上页" nextPage="下页" divClass="pageNav"/>
假设当前作用域中的pager为测试举例中设置好的pager,最终输出到页面的代码为:
<div class="pageNav">
<a href="www.iteye.com?type=1&index=1&size=5">首页</a>
<a href="www.iteye.com?type=1&index=16&size=5">上页</a>
<a href="www.iteye.com?type=1&index=14&size=5">14</a>
<a href="www.iteye.com?type=1&index=15&size=5">15</a>
<a href="www.iteye.com?type=1&index=16&size=5">16</a>
<span>17</span>
<a href="www.iteye.com?type=1&index=18&size=5">18</a>
<a href="www.iteye.com?type=1&index=19&size=5">19</a>
<a href="www.iteye.com?type=1&index=20&size=5">20</a>
<a href="www.iteye.com?type=1&index=21&size=5">21</a>
<a href="www.iteye.com?type=1&index=18&size=5">下页</a>
<a href="www.iteye.com?type=1&index=200&size=5">末页</a></div>
以上为例,
当url="www.iteye.com"时,
类似www.iteye.com?type=1&index=1&size=5的将更改为类似www.iteye.com?index=1&size=5的;
当url="javascript:show"时(show为相应的javascript函数名称),
类似www.iteye.com?type=1&index=1&size=5的将更改为类似javascript:show('1','5');的。
倘若未指定pageSize或其值为空值,则&size=5将不追加;相应的类似javascript:show('1','5');的,参数只有前面的一个。
8、 结束语
分页组件的使用就讲解到这里,在下面上传的压缩包中,我还提供了几个CSS分页样式定义。希望大家多提更好的建议和意见,以便改进,谢谢参与,不胜感激。
注:在开发中参考了博客:http://zhangshixi.iteye.com/blog/677469的内容。也在此谢谢博客的作者,正因为看了他的博客,才使我萌生了改进他的分页组件的意念。此分页组件虽参考了他的实现,但却运用了很多自己的思维,重写或更改了很大部分代码。
相对于他写的分页组件,此分页组件主要的改进:
1) 新增了延迟处理逻辑
2) 新增了倒顺序排列
3) 新增了javascript方式提交
4) 新增了是否显示页码连接范围设置
5)新增了是否竖向排列展示设置
6) 更改了部分数据有效性验证
7) 更改了大部分数据的计算逻辑
8) 更改了部分输出到页面的标签,以便更好的应用CSS样式
相关推荐
这个也是出于网上,但经过个人整理。如果想用,慢慢往下看。 里面有详细的代码注释。可以参考。 数据库采用mysql,数据库建库数据库代码没有提供,请自行...该代码可作为通用分页组件使用。 其他功能待有时间再次添加
java web通用分页组件发布了! 超级强悍的java web通用分页组件,只要简单的一条sql语句就可以轻松的实现分页,目前对oracle,SQL Server2005,SQL server200,mysql都做了实现,程序通过接口来封装,你可以实现对其他...
SSH分页 分页 通用分页 struts2分页
Java 通用分页组件是Java开发中非常常见的一种工具,它能够帮助开发者在处理大量数据时,有效地将数据分块展示,提高用户界面的响应速度和用户体验。在本实例中,我们将探讨如何使用一个这样的组件,它支持Struts...
通用PHP分页组件是一种高效的解决方案,它解决了在网站开发中处理大量数据时的分页问题。在网页上显示所有数据可能会导致页面加载速度慢,用户体验下降,因此分页成为了一个必要的设计元素。这个PHP分页组件的核心...
分页组件通常会提供一个接口,用于设置这些参数,并返回相应的分页数据。 2. **组件结构** 这个组件可能包含以下几个部分: - **分页类(PageBean)**:存储当前页、总页数、每页条数等信息。 - **数据查询接口...
**通用分页组件JPage详解** 在Web开发中,数据分页是一种常见的需求,它能够帮助用户更有效地浏览大量信息,提高用户体验。JPage是一款通用的分页组件,旨在简化Java Web开发中的分页实现,提供了灵活的配置和丰富...
通用分页组件通常具备高度可配置性,能够适应各种不同的设计风格和功能需求。现在我们来深入探讨这个分页组件的相关知识点。 首先,**分页的基本原理**:分页组件的目的是将大量数据分割成若干小块,每次只加载一...
通用分页则是指设计一个可以适应多种场景的分页组件,它可能包含以下特性: 1. 参数化配置:允许用户自定义每页显示的记录数。 2. URL路由处理:支持参数传递,如通过`?page=2`来表示第2页。 3. 多种样式支持:提供...
"web通用分页代码有说明"这个主题涵盖了如何实现一个适用于多种场景的分页解决方案。在这个压缩包中,很可能包含了一个示例代码库,用于演示如何在网页上实现这样的功能。 分页的基本原理是将大量数据分割成较小的...
本资源提供的"java通用分页含使用文档"是一个jar包,旨在简化Java Web开发中的分页实现过程,避免开发者手动编写繁琐的分页代码。 首先,我们要理解什么是分页。在Web应用中,当数据量过大时,一次性加载所有数据会...
压缩包中的`分页组件简易文档.doc`很可能是对这个分页组件的详细说明,包括如何配置、使用以及可能出现的问题和解决方案。而`page`可能是实现分页功能的源代码文件,可能包含了`tag`和`tld`文件,以及可能的辅助类。...
这个“jsp分页组件”是一个原创的解决方案,专门用于Java Server Pages (JSP) 平台,提供高效且易于使用的分页功能。博主通过分享这篇博文,提供了自己的源码实现,以供开发者参考和学习。 分页组件的主要目标是...
### FreeMarker通用分页知识点解析 #### 1. 分页宏(Macro)定义 FreeMarker中的宏允许我们封装可重用的代码块,这在实现通用分页时显得尤为重要。宏`genPagination`是为分页而创建的核心组件,其参数包括: - `...
《通用权限管理组件使用说明书V3.0》是针对IT软件开发者设计的一份详细指南,旨在帮助用户理解和操作权限管理组件。本组件旨在解决软件开发中的权限控制问题,提高开发效率,确保系统的安全性和稳定性。 1. **通用...
本文将详细介绍通用分页的使用方法和原理。 首先,我们需要了解分页实现的基本组件。通常,一个分页系统由三部分组成:控制后台的类(如PageMethod)、前端显示控制类(如Pager)以及数据库连接类(如DBHelper)。...
5. **性能优化**:分页组件通常会配合后端的数据查询进行优化,例如使用SQL Server的OFFSET/FETCH或TOP/LIMIT语句,来只获取当前页所需的数据,避免了大量无用数据的传输。 6. **错误处理与调试**:一个良好的分页...
一个通用的分页组件可能包含以下几个关键部分: - 分页参数:存储每页大小、当前页码等信息。 - 分页查询接口:定义分页查询的方法,接受分页参数并返回分页结果。 - 数据源适配器:根据不同的数据库实现具体的...
通用的jsp分页组件,实例化后只需设置好各种属性,然后调用API即可得到已封装好“首页” “上一页”,“下一页”等分页操作的html表格String,直接在jsp页面中即可, 支持跳转到jsp和跳转到Action(struts架构)...