`
qingfeng_101
  • 浏览: 1936 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

通用分页组件使用说明

    博客分类:
  • Java
 
阅读更多

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、只有正确设置了linkSizebeforeNumafterNum,该对象的数据才算合格,而且两组数据只需设置其中一组即可,另一组数据将自动计算得到。(无效参数举例:linkSize==0beforeNum+afterNum==0

2、无需手动设置属性startIndexendIndex的值,并且手动设置的值在应用到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,则totalPagepastRowspreviousPagenextPage数据才经计算后一并设置;如果linkScope的数据合格,并且ready的值为true,则在初次调用getLinkScope()获得linkScope时,计算其属性startIndexendIndex的值并设置。

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。

 

注意

1pagerurlpageIndex为关键属性,必须设置值,pageIndex为空值时给予默认值“pageIndex”。

2、只有正确设置了beforeNumafterNum并且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>&nbsp;
<a href="www.iteye.com?type=1&index=16&size=5">上页</a>&nbsp;
<a href="www.iteye.com?type=1&index=14&size=5">14</a>&nbsp;
<a href="www.iteye.com?type=1&index=15&size=5">15</a>&nbsp;
<a href="www.iteye.com?type=1&index=16&size=5">16</a>&nbsp;
<span>17</span>&nbsp;
<a href="www.iteye.com?type=1&index=18&size=5">18</a>&nbsp;
<a href="www.iteye.com?type=1&index=19&size=5">19</a>&nbsp;
<a href="www.iteye.com?type=1&index=20&size=5">20</a>&nbsp;
<a href="www.iteye.com?type=1&index=21&size=5">21</a>&nbsp;
<a href="www.iteye.com?type=1&index=18&size=5">下页</a>&nbsp;
<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样式

分享到:
评论
1 楼 geyu2012 2012-08-13  
分页通常都要附加表单提交的,如何实现?

相关推荐

    JSP通用分页组件 javabean分页

    这个也是出于网上,但经过个人整理。如果想用,慢慢往下看。 里面有详细的代码注释。可以参考。 数据库采用mysql,数据库建库数据库代码没有提供,请自行...该代码可作为通用分页组件使用。 其他功能待有时间再次添加

    java web Pager通用分页组件(源码)

    java web通用分页组件发布了! 超级强悍的java web通用分页组件,只要简单的一条sql语句就可以轻松的实现分页,目前对oracle,SQL Server2005,SQL server200,mysql都做了实现,程序通过接口来封装,你可以实现对其他...

    SSH通用分页组件 SSH分页

    SSH分页 分页 通用分页 struts2分页

    java 通用分页组件 实例 源码

    Java 通用分页组件是Java开发中非常常见的一种工具,它能够帮助开发者在处理大量数据时,有效地将数据分块展示,提高用户界面的响应速度和用户体验。在本实例中,我们将探讨如何使用一个这样的组件,它支持Struts...

    通用PHP分页组件

    通用PHP分页组件是一种高效的解决方案,它解决了在网站开发中处理大量数据时的分页问题。在网页上显示所有数据可能会导致页面加载速度慢,用户体验下降,因此分页成为了一个必要的设计元素。这个PHP分页组件的核心...

    jsp页面数据分页通用组件

    分页组件通常会提供一个接口,用于设置这些参数,并返回相应的分页数据。 2. **组件结构** 这个组件可能包含以下几个部分: - **分页类(PageBean)**:存储当前页、总页数、每页条数等信息。 - **数据查询接口...

    通用分页组件JPage

    **通用分页组件JPage详解** 在Web开发中,数据分页是一种常见的需求,它能够帮助用户更有效地浏览大量信息,提高用户体验。JPage是一款通用的分页组件,旨在简化Java Web开发中的分页实现,提供了灵活的配置和丰富...

    通用分页组件

    通用分页组件通常具备高度可配置性,能够适应各种不同的设计风格和功能需求。现在我们来深入探讨这个分页组件的相关知识点。 首先,**分页的基本原理**:分页组件的目的是将大量数据分割成若干小块,每次只加载一...

    超强php分页打包 通用分页 万能分页 ajax分页 google分页

    通用分页则是指设计一个可以适应多种场景的分页组件,它可能包含以下特性: 1. 参数化配置:允许用户自定义每页显示的记录数。 2. URL路由处理:支持参数传递,如通过`?page=2`来表示第2页。 3. 多种样式支持:提供...

    web通用分页代码有说明

    "web通用分页代码有说明"这个主题涵盖了如何实现一个适用于多种场景的分页解决方案。在这个压缩包中,很可能包含了一个示例代码库,用于演示如何在网页上实现这样的功能。 分页的基本原理是将大量数据分割成较小的...

    java通用分页含使用文档

    本资源提供的"java通用分页含使用文档"是一个jar包,旨在简化Java Web开发中的分页实现过程,避免开发者手动编写繁琐的分页代码。 首先,我们要理解什么是分页。在Web应用中,当数据量过大时,一次性加载所有数据会...

    分页组件--通用的分页标签

    压缩包中的`分页组件简易文档.doc`很可能是对这个分页组件的详细说明,包括如何配置、使用以及可能出现的问题和解决方案。而`page`可能是实现分页功能的源代码文件,可能包含了`tag`和`tld`文件,以及可能的辅助类。...

    jsp分页组件(原创)

    这个“jsp分页组件”是一个原创的解决方案,专门用于Java Server Pages (JSP) 平台,提供高效且易于使用的分页功能。博主通过分享这篇博文,提供了自己的源码实现,以供开发者参考和学习。 分页组件的主要目标是...

    FreeMarker通用的分页

    ### FreeMarker通用分页知识点解析 #### 1. 分页宏(Macro)定义 FreeMarker中的宏允许我们封装可重用的代码块,这在实现通用分页时显得尤为重要。宏`genPagination`是为分页而创建的核心组件,其参数包括: - `...

    通用权限管理组件使用说明书V3.0.doc

    《通用权限管理组件使用说明书V3.0》是针对IT软件开发者设计的一份详细指南,旨在帮助用户理解和操作权限管理组件。本组件旨在解决软件开发中的权限控制问题,提高开发效率,确保系统的安全性和稳定性。 1. **通用...

    通用分页的使用方法以及原理

    本文将详细介绍通用分页的使用方法和原理。 首先,我们需要了解分页实现的基本组件。通常,一个分页系统由三部分组成:控制后台的类(如PageMethod)、前端显示控制类(如Pager)以及数据库连接类(如DBHelper)。...

    ASP.NET分页通用组件 支持很多自定义格式和传值方式

    5. **性能优化**:分页组件通常会配合后端的数据查询进行优化,例如使用SQL Server的OFFSET/FETCH或TOP/LIMIT语句,来只获取当前页所需的数据,避免了大量无用数据的传输。 6. **错误处理与调试**:一个良好的分页...

    java通用分页代码实例.rar

    一个通用的分页组件可能包含以下几个关键部分: - 分页参数:存储每页大小、当前页码等信息。 - 分页查询接口:定义分页查询的方法,接受分页参数并返回分页结果。 - 数据源适配器:根据不同的数据库实现具体的...

    jsp分页组件

    通用的jsp分页组件,实例化后只需设置好各种属性,然后调用API即可得到已封装好“首页” “上一页”,“下一页”等分页操作的html表格String,直接在jsp页面中即可, 支持跳转到jsp和跳转到Action(struts架构)...

Global site tag (gtag.js) - Google Analytics