`

分页插件(2)

    博客分类:
  • java
 
阅读更多

在上一章了解分页sql语句(1)实现后,写一个类实现分页的各个参数,函数和链接。

 链接格式:总共n页 当前页是10,(1 2 ... 7 8 9 10 11 12 ... n-1 n)

Paging.java

package com.by.eshop.util.web.paging;

import java.util.ArrayList;

/**
 *       约定: 页数从1开始,行数从1开始
 */
public class Paging {

	public static final int DEFAULT_PAGING_SIZE = 10;  // 默认每页显示行数

	private int maxRowNumber = 0; // 总记录数
	private int pageNumber = 1;      // 第几页
	private int pageSize = 10;         // 默认每页显示行数
	private ArrayList<String> pageList = new ArrayList<String>();

//     总记录数
	public Paging(int maxRowNumber) {
		if (maxRowNumber > -1) {
			this.maxRowNumber = maxRowNumber;
		}
		this.pageSize = DEFAULT_PAGING_SIZE;
	}
//     设置第几页
	public void setPageNumber(int pageNumber) {
		if (this.pageNumber > 0) {
			this.pageNumber = pageNumber;
		}
	}
//      设置每页显示数
       public void setPageSize(int pageSize) {
		if (this.pageSize > -1) {
			this.pageSize = pageSize;
		}
	}
//      获取该页开始记录数
	public int getStartRowNumber() {
		return (this.pageNumber - 1) * this.pageSize + 1;
	}
//      获取该页结束记录数
	public int getEndRowNumber() {
		return this.getStartRowNumber() + this.pageSize - 1;
	}
//      获取当前页
	public int getPageNumber() {
		return this.pageNumber;
	}
//      获取总页数
	public int getPageCount() {
		return this.maxRowNumber % this.pageSize == 0 ? (this.maxRowNumber / this.pageSize) : (this.maxRowNumber / this.pageSize + 1);
	}
//      判断是否有上一页
	public boolean hasPreviousPaging() {
		return this.pageNumber > 1;
	}
//      判断是否有下一页
	public boolean hasNextPaging() {
		return this.pageNumber < this.getPageCount();
	}
//      获取下一页
	public Paging getNextPaging() {
		if (!hasNextPaging()) {
			return null;
		}
		Paging paging = new Paging(maxRowNumber);  // 总记录数
		paging.setPageNumber(pageNumber + 1);         // 设置页数
		paging.setPageSize(pageSize);                          // 每页记录数
		return paging;
	}
//      获取上一页
	public Paging getPreviousPaging() {
		if (!hasPreviousPaging()) {
			return null;
		}
		Paging paging = new Paging(maxRowNumber);
		paging.setPageNumber(pageNumber - 1);
		paging.setPageSize(pageSize);
		return paging;
	}
//     首页
	public Paging getFirstPaging() {
		Paging paging = new Paging(maxRowNumber);
		paging.setPageNumber(1);
		paging.setPageSize(pageSize);
		return paging;
	}
//      尾页
	public Paging getEndPaging() {
		Paging paging = new Paging(maxRowNumber);
		paging.setPageNumber(this.getPageCount());
		paging.setPageSize(pageSize);
		return paging;
	}
//     创建页数的链表 格式如下 1 2 ... 15 16 17 ... 29 30
	public void creatPageList() {
		int start_end_page_count = 2;
		int middle_page_count=3;
		int totalPages = getPageCount();   // 总页数
		
		if(totalPages==0)
			return;
		pageNumber = Math.max(1, Math.min(pageNumber,totalPages));  // 第几页
//             如果当前页不是1 加入上一页链接
		if (pageNumber != 1) {
			this.pageList.add("<a class='page_link' href='javascript:void(0)' id='" + String.valueOf(pageNumber - 1) + "'>上一页</a>");
		}
//              如果总页数小于11就简单的显示数字链接(当前页不需要链接)
		if(totalPages<=(middle_page_count+start_end_page_count)*2+1){
			for(int i=1;i<=totalPages;i++)
				if (i == pageNumber)
					this.pageList.add("<span class='page_now'>"
							+ String.valueOf(i) + "</span>");
				else
					this.pageList.add("<a href='javascript:void(0)' id='"
							+ String.valueOf(i) + "'>" + String.valueOf(i)
							+ "</a>");

		}	
		else {
//                      让开始2页和当前页之间的用...来表示 (前提是总页数大于10)
                         if (pageNumber - middle_page_count > start_end_page_count + 1) {
				// 12 ... n-3 n-2 n-1 n
                                // 前部分
                                 for (int i = 1; i <= start_end_page_count; i++)
					this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");
                               // 中间
				this.pageList.add("<span class='page_dot'>...</span>");
                               // 后面
				for (int i = pageNumber - middle_page_count; i <= pageNumber; i++) {
					if (i == pageNumber)
						this.pageList.add("<span class='page_now'>"+ String.valueOf(i) + "</span>");
					else
						this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");
				}
			} else {
                              // 否则只是显示页数链接
                              for (int i = 1; i <= pageNumber; i++) {
					if (i == pageNumber)
						this.pageList.add("<span class='page_now'>"+ String.valueOf(i) + "</span>");
					else
						this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");
			}
		}
                        //在后面的中间加入...
                          if (pageNumber + middle_page_count < totalPages- start_end_page_count - 1) {
				// nn+1n+2...e-1e

				for (int i = pageNumber + 1; i <= pageNumber+ middle_page_count; i++)
					this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");

				this.pageList.add("<span class='page_dot'>...</span>");

				for (int i = totalPages - start_end_page_count + 1; i <= totalPages; i++)
					this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");
			} else {
				for (int i = pageNumber + 1; i <= totalPages; i++)
					this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");
		}
	}
//             当前页不是尾页且总页数不是1页 加入下一页链接
		if (pageNumber != totalPages && totalPages != 1) {
			this.pageList.add("<a class='page_link' href='javascript:void(0)' id='" + String.valueOf(pageNumber + 1) + "'>下一页</a>");
		}
		
	}

	@Override
	public String toString() {
		if (pageList.isEmpty()) {
			creatPageList();
		}

		StringBuilder sbu = new StringBuilder();
		for (String s : this.pageList) {
			sbu.append(s).append(" ");
		}

		return sbu.toString();
	}

	public int getMaxRowNumber() {
		return maxRowNumber;
	}

	public int getPageSize() {
		return pageSize;
	}

	public ArrayList<String> getPageList() {
		if(pageList.isEmpty()){
			creatPageList();
		}
		return this.pageList;
	}
}
 

 

分享到:
评论

相关推荐

    分页插件.zip

    2. **引入分页插件**:将`jquery.paginate.js`添加到HTML文件中,通常放在`&lt;/body&gt;`标签之前。 3. **应用样式**:将`jquery.paginate.css`链接到HTML的`&lt;head&gt;`部分,以定义分页按钮的样式。 4. **初始化插件**:在...

    Acrobat9_分页插件

    2. **分页插件的重要性**: 在处理大型PDF文档时,尤其是包含数百甚至数千页的文件时,手动分页不仅耗时且容易出错。Acrobat 9 分页插件的出现,解决了这一问题,用户可以通过一键操作快速对PDF文档进行分页,极大...

    SSH 通用分页插件

    SSH 通用分页插件是一种在Java开发中用于处理数据分页显示的工具,尤其在基于Struts2、Spring和Hibernate(SSH)的Web应用程序中非常常见。SSH框架结合了Struts2的MVC设计模式、Spring的依赖注入以及Hibernate的对象...

    javaee-SpringMVC-Mybatis 分页插件

    本项目“javaee-SpringMVC-Mybatis 分页插件”显然是一个结合了这三个框架实现的分页功能示例。下面我们将深入探讨这些技术及其分页插件的应用。 1. **JavaEE**:JavaEE(Java Platform, Enterprise Edition)是...

    织梦分页插件

    2. **配置设置**:在织梦后台找到相关的配置选项,如系统设置或模块设置,输入或选择分页插件的相关参数,如每页显示条目数、分页样式等。 3. **模板调用**:在织梦首页模板文件(如index.htm)中,正确地调用插件...

    bootstrap分页插件.zip

    Bootstrap分页插件是前端开发中常用的一种工具,它基于Twitter Bootstrap框架,为网页提供美观且功能丰富的分页导航。这个压缩包文件“bootstrap分页插件.zip”包含了一个名为“317482454-tm.pagination-195db9b”的...

    pagination - 前端分页插件

    本文将深入探讨“pagination”这一前端分页插件,它可以帮助开发者轻松实现具有CSS样式的分页功能。 分页插件是前端开发中的一个重要组件,它的主要作用是将大量数据分割成若干个较小的部分,每次只加载一部分数据...

    bootstrap分页插件

    Bootstrap分页插件是一种基于流行的前端框架Bootstrap设计的页面导航工具,主要用于在大量数据或内容中实现分块显示,提供用户友好的翻页体验。在Web应用中,当需要展示的数据超过一个页面所能容纳的范围时,分页就...

    封装的分页插件

    在Web开发中,分页插件是实现这一功能的重要工具。这里提到的是一个由个人开发者封装的简单分页插件,它可以帮助我们轻松地在网页上实现数据的分页显示。 分页的基本原理是将大数据集分割成较小、可管理的部分,...

    mybatis分页插件代码

    【标题】"mybatis分页插件代码"主要涉及到MyBatis框架中的一种增强功能——分页插件的使用。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。在处理大数据量时,分页查询是必不可少的优化...

    分页插件--基于jq编写的分页插件

    本文将详细介绍一个基于jQuery编写的分页插件,以及如何利用这个插件快速实现网页的分页功能。 分页插件的核心目标是提供一种简单、易用的方式来将大量数据分割成多页,允许用户通过点击页码或导航按钮来浏览数据的...

    vue分页插件_vue.js分页插件下载

    Vue.js 提供了多种实现分页功能的方法,包括自定义组件和使用现成的分页插件。 一、Vue分页插件的基本原理 Vue分页插件的核心思想是通过计算当前页、总页数、每页显示数量等参数,动态生成分页条目,并监听用户的...

    适配所有浏览器的js分页插件

    **JavaScript分页插件概述** 在网页开发中,分页是一种常见的数据展示方式,它能够有效地组织大量数据,提高用户体验。本项目提供的“适配所有浏览器的js分页插件”是一个轻量级且易用的解决方案,尤其适用于那些...

    java分页插件,简单实用

    Java分页插件是开发大型数据应用时必不可少的工具,它可以帮助我们有效地管理数据库查询,减少服务器负担,提高用户体验。本插件以简单实用为特点,适合初学者和经验丰富的开发者使用,允许用户根据自己的需求进行...

    JQ的分页插件

    JQ的分页插件是一种高效的解决方案,它能够帮助开发者轻松实现网页内容的分页显示,提升用户体验。本资源包含了一系列必要的文件,用于演示如何使用这个插件。 首先,我们来看`pagination.css`文件,这是一个CSS...

    06实现mybatis分页插件demo

    06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo...

    简单分页插件

    "简单分页插件"是一个针对JavaScript(js)设计的小巧实用的工具,用于帮助开发者轻松实现网页的分页功能。下面将详细阐述这个插件的工作原理、使用方法以及可能涉及到的技术点。 首先,`myPagination.css`是这个...

    15个精美的jq分页插件

    本文将详细介绍标题为“15个精美的jq分页插件”的内容,这些插件都是基于jQuery库开发的,具有美观、易用的特点,适合各种类型的网站应用。 首先,jQuery是一个广泛使用的JavaScript库,它简化了HTML文档遍历、事件...

    MyBatis高级应用:实现自定义分页插件

    为了提高代码的可维护性和可移植性,我们可以通过编写自定义分页插件来实现更灵活的分页逻辑。本文将详细介绍如何在 MyBatis 中实现自定义分页插件。 自定义分页插件提供了一种灵活且高效的方式来实现 MyBatis 的...

    ssh 分页 控件 (分页插件)

    1. **配置插件**:在Struts2的配置文件中,我们需要引入分页插件的相关配置,这通常涉及拦截器、结果类型和插件类等设置。 2. **模型层**:在业务模型中,需要定义一个Page对象,它包含了当前页码、每页显示条数、...

Global site tag (gtag.js) - Google Analytics