对于大多初学者来说,分页功能可能是大家都头疼的一件事。有些人,可能为了实现分页效果,而在页面上写了很多让自己都感觉头晕的一大堆代码。虽然最后可以实现分页效果,但是确不具备着可移植,可重用的效果。这样导致页面上的代码增多,而到其他地方用到分页时,只能复制粘贴重复的代码。这样就造成页面代码的混乱。而怎样实现分页的可移植,可重用的效果呢?这就是我要介绍的。
---------Pagination(类)-------
属性:get,set方法省了,自己生成,别说不会,不然我敲死你…
/** 当前页 */
private int pageNo;
/** 每页数据量 */
private int pageSize;
/** 总数据量 */
private int allCount;
/** 总页数 */
private int allPage;
/** 每页开始 */
private int recordStart;
/** 每页结束 */
private int recordEnd;
/** 显示页数 */
private int showCount;
/** 显示开始 */
private int showStart;
/** 显示结束 */
private int showEnd;
/** RUL地址*/
private String url;//页面传过来的URL(具体有什么用等下会解释,上面的应该都很容易理解了吧)
/** 样式名字*/
private String styleClass;
构造方法:
/**
* 构造方法,缺省每页记录数为12、显示页码数为9、样式名字为空
* @param pageNo 当前页
* @param allCount 总记录数
* @param url 分页URL
*/
public Pagination(int pageNo, int allCount,String url) {
this(pageNo,12,allCount,9,url,"");
}
/**
* 构造方法,缺省显示页码数为9、样式名字为空
* @param pageNo 当前页
* @param pageSize 每页记录数
* @param allCount 总记录数
* @param url 分页URL
*/
public Pagination(int pageNo, int pageSize, int allCount,String url) {
this(pageNo,pageSize,allCount,9,url,"");
}
/**
* 构造方法,缺省样式名字为空
* @param pageNo 当前页
* @param pageSize 每页记录数
* @param allCount 总记录数
* @param showCount 显示页码数
* @param url 分页URL
*/
public Pagination(int pageNo, int pageSize, int allCount, int showCount ,String url) {
this(pageNo,pageSize,allCount,showCount,url,"");
}
/**
* 构造方法
* @param pageNo 当前页
* @param pageSize 每页记录数
* @param allCount 总记录数
* @param showCount 显示页码数
* @param url 分页URL
* @param styleClass 样式名字
*/
public Pagination(int pageNo, int pageSize, int allCount, int showCount,String url,String styleClass) {
this.pageNo = pageNo;
this.pageSize = pageSize;
this.allCount = allCount;
this.showCount = showCount ;
this.url = url ;
this.styleClass = styleClass ;
init();
}
初始化:
/**
* 初始化分页各种参数
*/
private void init() {
allPage = allCount%pageSize==0 ? allCount/pageSize : allCount/pageSize+1 ;
if(pageNo>allPage){
pageNo = allPage ;
}
if (pageNo < 1) {
pageNo = 1;
}
recordStart = (pageNo-1) * pageSize ;
recordEnd = Math.min(recordStart+pageSize, allCount);
showCount = Math.min(showCount, allPage);
if (showCount>=allPage) {
showStart = 1;
showEnd = allPage;
} else {
if (pageNo <= (showCount+1)/2) {
showStart = 1;
showEnd = showCount ;
} else if(pageNo > allPage-(showCount+1)/2 ) {
showStart = allPage - showCount + 1 ;
showEnd = allPage ;
} else{
showStart = pageNo - showCount/2;
showEnd = showStart+showCount-1 ;
}
}
}
--------------------------------------
/**
* 获取分页数据
* @param <T> 范型参数
* @param list 需要分页的总数据集合
* @return
*/
public <T> List<T> getPageDate(List<T> list) {
return list.subList(recordStart,recordEnd);
}
toString方法:(这个就是分页的灵魂了,里边实现了为网页动态加入的HTML代码,这种编程方式可以实现网页代码后台生成机制,这样你只要在页面用$(Pagination)这个表达式实现就行了,这样利用toString()这个方法,在后台构造出页面的html的代码,这样你就可以像插件一样,随时的在页面上放置到任何你想要放置的位置了。)
/**
* 生成页面的分页元素(分页html页面标签)
*/
public String toString(){
StringBuffer sb = new StringBuffer();
sb.append("<div class='"+styleClass+"'>");
if(pageNo<2){
sb.append("<a>首 页</a> ");
sb.append("<a>上一页</a> ");
}else{
sb.append("<a href='"+url+"?pageNo=1'>首 页</a> ");
sb.append("<a href='"+url+"?pageNo="+(pageNo-1)+"'>上一页</a> ");
}
for (int i = showStart; i < pageNo; i++) {
sb.append("<a href='"+url+"?pageNo="+i+"'>" + i + "</a> ");
}
sb.append("<span>" + pageNo + "</span> ");
for (int i = pageNo + 1; i <= showEnd; i++) {
sb.append("<a href='"+url+"?pageNo="+i+"'>" + i + "</a> ");
}
if(pageNo>=allPage){
sb.append("<a>下一页</a> ");
sb.append("<a>尾 页</a> ");
}else{
sb.append("<a href='"+url+"?pageNo="+(pageNo+1)+"'>下一页</a> ");
sb.append("<a href='"+url+"?pageNo="+allPage+"'>尾 页</a> ");
}
sb.append("</div>");
return sb.toString();
}
------------------Action-----------------
在你想要实现分页的那个Action类里面,get\set他们,那么你就可以在页面上通过$(Pagination)来显示出来。
private Pagination pagination;
private Integer pageNo = 1; //这个一定要有,不然会出错的
其实这个分页的功能,为什么能在页面上实现可重用,可移植,可随意显示,都是利用toString()这个方法,在后台构造好你要在html页面的现实效果,然后在这个方法类里面实现这些业务功能,这样再通过Action来get/set这个类,就可能在页面上随意的显示了...这样就可以独立出来,像一个插件一样,几时用到,就几时调用就行了...呵呵,这个就是toString()的好处。
希望大家能体会到toString带来的好处,如果大家有什么好例子,也可以相互分享下。喜欢并觉得不错的,希望支持下,这是我发表的第二篇文章,给点动力。
分享到:
相关推荐
本教程将详细讲解如何利用jQuery、Java和Struts2框架来实现一个美观且可自定义样式的分页功能。 首先,jQuery是一个广泛使用的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax交互等任务。在分页场景...
至此,一个基本的SSM框架下的分页实现已经完成。但实际项目中,我们可能还需要考虑更多的细节,比如分页插件的使用(如MyBatis的PageHelper),以及对查询条件、排序方式等的处理。此外,前端分页样式和交互也需要...
在SSM框架中实现分页功能是提高Web应用程序性能和用户体验的关键技术之一。下面将详细介绍如何在SSM框架下实现分页功能。 首先,理解分页的基本概念。分页是将大量数据分成若干小部分,每次只加载一部分数据到前端...
综上所述,"纯Struts 2框架带条件分页Demo"是一个实践性的教学案例,涵盖了Struts 2的基础知识,如Action、配置、拦截器、视图以及与MySql的交互,同时展示了如何实现带有查询条件的分页功能。通过这个Demo,开发者...
Struts2是一个强大的Java EE应用程序框架,用于构建MVC(模型-视图-控制器)架构的Web应用。在处理大量数据时,分页是必不可少的功能,它可以提高用户体验,避免一次性加载过多数据导致页面响应变慢。本文将详细介绍...
Struts2框架提供了一种内置的分页支持,但有时开发人员需要根据项目需求定制更符合业务逻辑的分页功能。本篇文章将深入探讨如何在Struts2中实现自定义分页标签,以及相关的源码分析和工具使用。 首先,我们需要理解...
Struts2是一个强大的Java web开发框架,它简化了MVC(模型-视图-控制器)架构的实现,使得开发者能够更高效地构建可维护、可扩展的Web应用程序。本项目聚焦于利用Struts2框架进行数据库操作以及实现简单的分页功能,...
在SSH框架中,我们可以使用Struts2的拦截器或者自定义插件来实现分页。拦截器可以在Action执行前后进行处理,如计算页码、传递参数等。同时,可以创建一个分页Result类型,让视图层更好地展示分页信息。 二、Spring...
在本文中,我们将深入探讨如何在Struts2框架下实现分页功能。 首先,我们需要理解分页的基本原理。分页的核心是将大数据集分成若干小块,每次只加载一部分数据到页面上,用户可以通过导航链接来切换不同的数据页。...
因此,“三大框架分页技术”是指在Spring MVC、Struts2和Hibernate这三大主流Java开发框架中实现分页的方法。 首先,让我们从Spring MVC框架开始。Spring MVC提供了ModelAndView类,可以用来在视图和模型之间传递...
2. **创建Action类**:创建一个Action类,该类将处理用户的分页请求。在这个类中,定义分页参数,如当前页数和每页显示的数量,以及查询条件。 3. **定义Service接口和实现**:创建一个Service接口,定义获取分页...
"ext3+struts2+hibernate+spring的CRUD+分页"是一个典型的Java Web开发组合,用于实现全面的数据管理功能。这个组合充分利用了各个框架的优势,提供了一个强大的后端数据处理和前端展示的解决方案。 首先,EXT3是一...
在Struts2中,可以使用第三方插件如DisplayTag或自己编写Action来实现分页。通常,我们需要在Action中获取数据库查询的结果集,并计算总记录数,然后根据每页显示的条数进行分页。JSP页面上通过参数传递当前页码,...
Struts 是一个非常著名的开源框架,它用于构建基于 Java 的 Web 应用程序。在 Struts 自制标签分页封装的场景中,我们通常是为了提高应用的可维护性和易用性,通过自定义标签来实现页面的动态分页功能。在不依赖 ...
SSH分页则是指在使用这三个框架开发应用程序时,实现数据展示分页的一种技术手段。 **Struts** 是一个基于MVC设计模式的Web应用框架,主要用于控制视图与模型之间的交互。它提供了一种组织应用逻辑的方式,使得...
在本程序中,"用Struts2的分页代码"是实现数据分页显示的一个关键功能,它允许用户分批查看大量数据,提高用户体验并减轻服务器负载。 分页技术通常涉及以下几个核心概念: 1. **分页查询**:在数据库中,我们并不...
根据提供的标题、描述以及部分内文,我们可以梳理出...通过以上步骤,我们就可以在一个Java Web应用程序中实现Struts2与Hibernate结合的分页功能。这种方法不仅提高了开发效率,而且使得代码更加简洁、易读和易于维护。
在Struts2框架中,实现分页功能通常需要自定义一个分页类。上述代码展示了一个名为`NewPager`的分页类,该类封装了分页的核心逻辑。类中包含了以下关键属性: - `totalRows`: 总记录数,用于计算总页数。 - `...
3. **MyBatis**:MyBatis是一个持久层框架,它提供了一种方便的方式来映射Java类和数据库表之间的关系。在增删改查功能中,MyBatis通过Mapper接口和XML配置文件(或者注解)来执行SQL语句,实现了数据的CRUD操作。...
在本项目中,我们主要探讨的是如何利用Java的三大流行框架——Spring、Struts2和Mybatis,结合jQuery,来构建一个完整的Web应用程序。这个应用的核心功能包括对单个数据表进行基本的增删改查(CRUD)操作,实现条件...