import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 程序目的:
* 在 Action 里调用的时候传几个参数进去,然后就可以到跳转过后的页面里面取出分页的必须
* 参数,达到分页的功能。
*
* 前台页面实例代码:
* 遍历 list
* <c:forEach var="i" items="${requestScope.list}"
* begin="${requestScope.beginPoint}"
* end="${requestScope.endPoint}" >
*
* list 中的内容
* ...
* </c:forEach>
*
* 页面跳转链接代码:
* <A href="actionName.do&page=1">第一页</A>
* <A href="action.do&page=${requestScope.curPage - 1}">上一页</A>
* <A href="action.do&page=${requestScope.curPage + 1}">下一页</A>
* <A href="action.do&page=${requestScope.totalPage}">最后一页</A>
*
* 显示页码及链接
* <c:forEach var="i" begin="${requestScope.pageFirst}"
* end="${requestScope.pageLast}">
* <c:choose>
* <c:when test="${requestScope.curPage == i}">
* ${i}
* </c:when>
* <c:when test="${requestScope.curPage != i}">
* <A href="actionName.do?page=${i}">${i}</A>
* </c:when>
* </c:choose>
* </c:forEach>
*
* @author LovinChan
*
* 看到网上有很多分页的实例代码,觉得都写得很不错,不过对于大侠们写的那些代码,本人觉得
* 他们要展示的不过就是一种计算页面的方法,如果看懂了就看懂了,如果没看懂还是不知道用。至少
* 要我去用的话会有点困难,那些东西很多地方都要大改动。
* http://displaytag.sourceforge.net/11/ 可以下到 displaytag,这确实是个好东
* 西,只要有个list,就可以跟你把页数,页面链接,当前页面,需要显示的表格等等东西都给
* display出来,如果用 displaytag 用得熟的话对于这种将数据都取出来存进一个list里面然后传
* 到前台页面上去分页应该可以说是一点问题都没有了。
* 本人看了网上很多帖子偶得一点灵感,自己写一个工具类供别人调用,只需要传几个参数,就可
* 以得到分页展示必须的参数,然后只要在前台的jsp页面里面调用就可以了。
*
* 但是这个方法对别人用起来可能会觉得有点烂,呵呵,至少我自己用着觉得蛮好的了,对于一次
* 将数据都取出来然后分页的方法用这个还是蛮顺手的,在这里也想请各位大侠多多指出其中的不足之
* 处,多加以批评,让我也可以早点改正一些我还没发现的bug。
*
* 程序的注释我尽量写得详细一点,如果觉得这个程序哪里有问题或者是哪里有改进的
* 地方欢迎随时跟我交流。
*
* 我的msn:egg.chenlw@gmail.com
* QQ:372133556(注上为什么加我就可以了)
* 我的blog:http://hi.baidu.com/egg_chen
* 欢迎交流
*/
public class PagingUtil {
/**
* 需要显示的页码段的数量,当前 PAGE_SIZE 表示最多在前台页面上显示 10 个页码数
*/
public final static int PAGE_SIZE = 10;
/**
* 用户可以在 Action 中传入下面的参数,然后就可以直接到前台 jsp 页面中将这些参数
* 取出并加以显示出来。
* @param pageSize 每页需要显示物品的数量
* @param list 由后台传来用来显示的list
* @param request Action 里面的 request 参数
* @param response Action 里面的 response 参数
*/
public static void pagingList(int pageSize, List<?> list,
HttpServletRequest request, HttpServletResponse response) {
// 总共有多少页
int totalPage;
// 当前页数
int curPage;
// 取得 Action 里传入的 list 的长度
int listSize = list.size();
// 如果这个 list 里面没有东西,则返回的所有的跟页面有关的参数都是 0
if(listSize == 0) {
request.setAttribute("begin", 0);
request.setAttribute("end", 0);
request.setAttribute("list", 0);
request.setAttribute("curPage", 0);
request.setAttribute("totalPage", 0);
return;
}
// 计算总共有多少页
if(listSize % pageSize != 0) {
totalPage = listSize / pageSize + 1;
} else {
totalPage = listSize / pageSize;
}
// 从 request 参数中取出将要显示的页数
// request 参数是由前台页面传入 Action,再从 Action 中传过来的,
String _curPage = (String) request.getParameter("page");
// 将从 request 中取出的数转换成整型,并保存在当前页数里面
if(null == _curPage) {
curPage = 1;
} else {
// 如果转换过程出现异常,则指定 curPage 为 1
try {
curPage = Integer.parseInt(_curPage);
} catch (Exception e) {
curPage = 1;
}
// 如果请求的参数比总页数大,则返回总页数,如果小于1,则返回1
if(curPage > totalPage) {
curPage = totalPage;
} else if(curPage <= 0) {
curPage = 1;
}
}
// 由于这个分页是采用对一个 list 来进行分页,所以需要计算出分页展示的
// list 段的长度,然后再在前台页面上循环 这个长度段上的 list
// 定义每一页需要显示的 list 段根据当前页数变化来变化
int beginPoint = pageSize * curPage - pageSize;
int endPoint = beginPoint + pageSize;
// 如果结束的 list 位置比当前 list 的长度还大,则指定 endPage 为当前 list 长度
if(endPoint > listSize) {
endPoint = listSize;
}
// 如果前台页面上需要显示部分页码
//(例如在页面右下角显示页码 ... 6 7 8 9 10 11 ... 54页)
// 以下就是用来计算部分页码的代码
// 需要显示的页码段的第一页页码(如上的 6)
int pageFirst;
// 需要显示的页码段的最后一页页码(如上的 11)
int pageLast;
// 让 curPage 显示的时候是居中显示
if(PAGE_SIZE % 2 == 0) {
pageFirst = curPage - PAGE_SIZE / 2 - 1;
pageLast = curPage + PAGE_SIZE / 2;
} else {
pageFirst = curPage - PAGE_SIZE / 2;
pageLast = curPage + PAGE_SIZE / 2;
}
if(pageFirst <= 0) {
pageFirst = 1;
}
if(pageLast >= totalPage) {
pageLast = totalPage;
}
// 设置 list 开始位置
request.setAttribute("beginPoint", beginPoint);
// 设置 list 结束位置
request.setAttribute("endPoint", endPoint - 1);
// 当前传入的 list
request.setAttribute("list", list);
// 将要显示的页面数
request.setAttribute("curPage", curPage);
// 总共的页面数
request.setAttribute("totalPage", totalPage);
// 显示的开始页码
request.setAttribute("pageFirst", pageFirst);
// 显示的结束页码
request.setAttribute("pageLast", pageLast);
}
}
分享到:
相关推荐
AspNetPager针对ASP.NET分页控件的不足,提出了与众不同的解决asp.net中分页问题的方案,即将分页导航功能与数据显示功能完全独立开来,由用户自己控制数据的获取及显示方式,因此...里面有帮助文档和小小的项目(Demo)
Oracle 的分页查询语句可以应用于各种场景,例如在 Web 应用程序中实现分页浏览数据,或者在报表系统中实现数据分页等。通过使用分页查询语句,可以提高查询效率,减少服务器的负载,提高用户体验。 五、结论 ...
3. **利用统计信息**:使用`DBMS_STATS`包收集统计信息,帮助优化器做出更好的执行计划选择。 #### 执行计划分析 执行计划对于理解查询的执行路径至关重要。下面是一个示例执行计划: ``` 0 SELECT STATEMENT ...
这个案例源码可以帮助开发者深入了解微信小程序的架构、API调用以及如何处理用户交互。下面将详细阐述这个案例涉及的关键知识点。 首先,微信小程序是腾讯公司推出的一种轻量级应用开发平台,它允许开发者使用...
在分析这个案例时,我们可以学习到如何组织和管理复杂的数据结构,如何使用微信小程序的存储机制(如wx.setStorageSync)来保存用户信息和偏好设置,以及如何实现高效的分页加载和下拉刷新功能。 在微信小程序开发...
在本案例中,“一个小小新闻系统ASP”是一个专门为初学者设计的简单新闻管理系统,旨在帮助他们理解和掌握ASP技术的基础应用。 ASP的工作原理是,当用户在浏览器中请求一个ASP页面时,服务器会解析该页面中的脚本,...
在本压缩包“微信小程序开发-LOL战绩查询案例源码.zip”中,包含的是一个用于教授微信小程序开发的实战项目,该项目的核心功能是查询英雄联盟(League of Legends,简称LOL)的游戏战绩。通过这个案例,开发者可以...
在Web应用中,正确配置日志可以方便地追踪错误,帮助开发者快速定位问题。 4. **缓存**:缓存是提高Web应用性能的有效手段,它可以存储经常访问的数据,减少对数据库的查询。Django支持多种缓存机制,包括内存缓存...
微信小程序是一种轻量级的应用开发平台,主要用于在微信内构建流畅、便捷的用户体验。这个"微信小程序开发-仿V2EX社区...同时,这也是一个很好的实践平台,帮助你提升前端开发技能,尤其是适应微信小程序特性的能力。
微信小程序是一种轻量级的应用开发平台,主要针对移动端,由腾讯公司推出,旨在提供便捷的、无需下载安装即可使用的应用服务。...同时,这个案例也适合用来作为教学材料,帮助初学者快速上手微信小程序的实战开发。
违章查询小程序则是帮助用户查询自己车辆的交通违章记录,通常需要对接交管部门的公开接口。其核心知识点包括: 1. **API接口接入**:开发者需要找到合适的违章查询API,并学习如何在小程序中调用这些接口,获取...
这个案例可以作为学习和参考的模板,帮助开发者了解如何在微信小程序环境中构建一个功能完善的电子商务平台。 1. **小程序开发基础** - **WXML**: 微信小程序的标记语言,类似于HTML,用于定义页面结构。 - **...
通过学习这个案例,开发者不仅可以了解到微信小程序的基本开发流程,还能掌握到如何构建一个功能完善的影音类应用,对于提升实际项目开发能力有很大帮助。在实践中不断探索,可以更好地理解和运用这些知识点。
根据经验的总结,让我们来看看十个能帮助你提升你的应用程序性能的经验,我将按将它们提升效率的多少从大到小小依次说明,一、返回多个数据集,二、对数据进行分页,三、连接池 ,四、 ASP.NET缓存API ,五、 预请求缓存,...
根据提供的文件信息,以下是从不同章节提取的关键知识点和概念,旨在帮助读者理解微信小程序开发的基础及进阶技术。 ### 第一章:开始入门 #### 课程介绍与目标设定 - **课程简介**:本章首先介绍了整个教程的目标...
从程序上说分页只是一种小技巧,但确实却是一个非常重要的小技巧,好,少说废话,我们开始 吧。 第一节:注册系统 (一),设定注册页面的外观: 在这个例子中涉及了五个页面,其中有三幅是一般的htm文件,另外...
总的来说,这个“小小的论坛”项目涵盖了ASP.NET开发的多个核心概念和技术,对于学习和实践ASP.NET开发具有很好的参考价值。通过深入研究源代码,可以了解到ASP.NET如何处理用户请求、如何与数据库交互、如何实现...
JavaScript插件是一种可扩展JavaScript功能的代码库,它们可以添加特定的特性或功能到现有的应用程序中,比如浏览器的JavaScript环境。开发者可以通过引入这些插件,来丰富他们的网页交互体验,提高开发效率。 在...
find函数的封装能帮助开发者更好地组织查询逻辑,而分页则是大型数据集展示的关键,它可以提高页面加载速度并优化用户体验。 05 04 更改和删除 - NodeJS - 传智播客.mp4进一步深入数据操作,讲解了如何修改和删除...
例如,在需要对大量数据进行分页处理时,可以通过定义变量来实现当前页码、每页显示数量等参数的存储和操作,从而控制数据的筛选与显示。 在掌握变量的使用之后,流程控制成为了变量发挥更大作用的舞台。在MySQL中...