小小分页帮助程序

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);
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值