`
shuzheng5201314
  • 浏览: 198310 次
  • 来自: 北京
社区版块
存档分类
最新评论

java分页通用类

 
阅读更多

分页是个说简单就简单,说复杂页不复杂的功能。网上各种分页类多多少少都不符合自己的需求,还是自己写一个吧。

 

支持一个页面出现多个分页功能:

 

 

import javax.servlet.http.HttpServletRequest;

/**
 * 分页实用类
 * 
 * @author shuzheng
 * @version 2014/04/21
 * 
 */
public class Pager {
	
	/**
	 * 生成简单的分页页面内容
	 * 
	 * @param total 总记录数
	 * @param size 每页记录数
	 * @param step 最多显示分页页数
	 * @param page 当前页数
	 * @param request 请求request
	 * @return 分页的HTML代码
	 */
	public static String getSimplePages(int total, int size, int step, int page, HttpServletRequest request, String paramName) {
		// 根据request获取当前url,包括参数,如果有已存在名称未paramname的参数,剔除掉,后面会追加新的参数
		String url = request.getContextPath() + request.getServletPath();
		String query = request.getQueryString();
		if (query != null) {
			String params = "";
			String[] querys = query.split("&");
			for (int i = 0 ; i < querys.length ; i ++) {
				if (querys[i].startsWith(paramName))
					continue;
				if (params.equals(""))
					params += querys[i];
				else
					params += "&" + querys[i];
			}
			if (!params.equals(""))
				url += "?" + params;
		}
		// 结果html
		String pages = "";

		int pageCount = (int) Math.ceil((double) total / size);// 求总页数
		if (pageCount == 1) {
			return pages;
		}
		if (page > pageCount) {
			page = pageCount;// 如果分页变量大总页数,则将分页变量设计为总页数
		}
		if (page <= 0) {
			page = 1;// 如果分页变量小于1,则将分页变量设为1
		}
		
		// 显示上一页
		if (page > 1) {
			if (url.contains("?")) {
				pages = pages.concat("<a class=\"prev\" href=\"" + url + "&" + paramName + "=" + (page - 1) + "\">上一页</a>\n");
			} else {
				pages = pages.concat("<a class=\"prev\" href=\"" + url + "?" + paramName + "=" + (page - 1) + "\">上一页</a>\n");
			}
		} else {
			pages = pages.concat("<a class=\"prev\" href=\"javascript:;\" style=\"color:#ccc\">上一页</a>\n");
		}
		// 显示分页码
		int listBegin = (page - (int) Math.floor((double) step / 2));//从第几页开始显示分页信息
        if (listBegin < 1) {
            listBegin = 1;
        }
        //显示第1页
		if (listBegin >= 2) {
			if (url.contains("?")) {
				pages = pages.concat("<a href=\"" + url + "&" + paramName + "=1\">1</a> ... \n");
			} else {
				pages = pages.concat("<a href=\"" + url + "?" + paramName + "=1\">1</a> ... \n");
			}
		}
        //当前页数右侧还有未显示页码时
        if (pageCount - page >= page - listBegin) {
			for (int i = listBegin; i < (listBegin + step); i++) {
				if (i != page) {
					if (url.contains("?")) {
						pages = pages.concat("<a href=\"" + url + "&" + paramName + "=" + i + "\">" + i + "</a>\n");
					} else {
						pages = pages.concat("<a href=\"" + url + "?" + paramName + "=" + i + "\">" + i + "</a>\n");
					}
				} else {
					pages = pages.concat("<span class=\"current\">" + i + "</span>\n");
				}
			}
	        //显示最后1页
			if (listBegin + step <= pageCount) {
				if (url.contains("?")) {
					pages = pages.concat(" ... <a href=\"" + url + "&" + paramName + "=" + pageCount + "\">" + pageCount + "</a>\n");
				} else {
					pages = pages.concat(" ... <a href=\"" + url + "?" + paramName + "=" + pageCount + "\">" + pageCount + "</a>\n");
				}
			}
        } else {	// 显示最后剩余的几个页码
        	for (int i = (pageCount-step) + 1; i <= pageCount; i++) {
				if (i != page) {
					if (url.contains("?")) {
						pages = pages.concat("<a href=\"" + url + "&" + paramName + "=" + i + "\">" + i + "</a>\n");
					} else {
						pages = pages.concat("<a href=\"" + url + "?" + paramName + "=" + i + "\">" + i + "</a>\n");
					}
				} else {
					pages = pages.concat("<span class=\"current\">" + i + "</span>\n");
				}
			}
        }
		// 显示下一页
		if (page < pageCount) {
			if (url.contains("?")) {
				pages = pages.concat("<a class=\"next\" href=\"" + url + "&" + paramName + "=" + (page + 1) + "\">下一页</a>\n");
			} else {
				pages = pages.concat("<a class=\"next\" href=\"" + url + "?" + paramName + "=" + (page + 1) + "\">下一页</a>\n");
			}
		} else {
			pages = pages.concat("<a class=\"next\" href=\"javascript:;\" style=\"color:#ccc\">下一页</a>\n");
		}
		return pages;
	}
}

 

 

 

使用方法:

 

public String test() {
	// 分页
	int total = 10;			//总记录数
	int size = 1;			//每页记录数
	int step = 7;			//最多显示分页页数
	int p1 = StringUtil.toInt(request.getParameter("p1"));			//当前页数
	int p2 = StringUtil.toInt(request.getParameter("p2"));			//当前页数
	int p3 = StringUtil.toInt(request.getParameter("p3"));			//当前页数
	int p4 = StringUtil.toInt(request.getParameter("p4"));			//当前页数
	
	return Pager.getSimplePages(total, size, step, p1, request, "p1") + "\n\n<br/><br/>\n\n" + 
			Pager.getSimplePages(total, size, step, p2, request, "p2") + "\n\n<br/><br/>\n\n" + 
			Pager.getSimplePages(total, size, step, p3, request, "p3") + "\n\n<br/><br/>\n\n" + 
			Pager.getSimplePages(total, size, step, p4, request, "p4");
}

 

 

结果如图所示:

 



 

 

 

 

  • 大小: 30.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics