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);
}
}
分享到:
相关推荐
这是一个由java实现的一个分页程序,很实用的奥!
Java SE程序 连接数据库的分页Java SE程序 连接数据库的分页Java SE程序 连接数据库的分页Java SE程序 连接数据库的分页Java SE程序 连接数据库的分页Java SE程序 连接数据库的分页Java SE程序 连接数据库的分页Java...
小程序自定义选择分页组件. 三个参数 max_page:最大分页数 page:当前选择页 show:是否显示 bind: selectPage 分页选择事件 引入组件即可使用
简单的分页程序 任何数据库都可以使用· 简单易懂
jsp+javabean 分页程序jsp+javabean 分页程序jsp+javabean 分页程序jsp+javabean 分页程序jsp+javabean 分页程序jsp+javabean 分页程序jsp+javabean 分页程序 简单实用供初学者参考
Struts2分页程序Struts2分页程序Struts2分页程序Struts2分页程序Struts2分页程序Struts2分页程序Struts2分页程序Struts2分页程序Struts2分页程序
java类似于百度的分页小程序,附带数据库,非常经典的一个现成的Demo,可以收藏。
自己写的PHP sqlite 分页代码程序
php分页程序 小结
汇编课程设计,文件分页显示程序的实现,程序与课设报告
实现了分页的一个小程序
文件分页显示程序的设计与实现,汇编语言程序的课程设计
C#自定义分页源程序
牛人写的分页程序,分页标签,Java自定义标签分页 值得一看
只能引用代码,就可以现实分页功能如:call showpage(strFileName,totalput,MaxPerPage,false,true,"个产品"),strFileName为链接,totalput为记录总数,MaxPerPage每个页面的记录个数
ASP+AJAX分页完整程序,直接可以测试,根据要求适当修改就可以用!
Java Web 应用开发-分页小程序
php页面显示及页面分页功能,代码清晰,注释明确!
自己写的一个分页程序 互相交流学习 #region 定义分页的一些常量 int pageSize = 8;//每页显示信息数量 int pagesCount_view; // 用于提示用户关于页码的总数 int pagesCount_operte;//用于操作分页关于页码的...
这是我自己写的一个基于java和mysql的分页程序,希望对大家开发web应用时有所帮助。可直接导入到myeclipse工程中使用