|
|
@@ -0,0 +1,229 @@
|
|
|
+package com.zheng.common.util;
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * 分页实体类
|
|
|
+ * @author shuzheng
|
|
|
+ * @date 2016年7月6日 下午6:05:00
|
|
|
+ */
|
|
|
+public class Paginator {
|
|
|
+
|
|
|
+ private long total = 0l; // 总记录数
|
|
|
+ private int page = 1; // 当前页数
|
|
|
+ private long totalPage = 1; // 总页数
|
|
|
+ private int rows = 10; // 每页记录数
|
|
|
+ private int step = 5; // 最多显示分页页码数
|
|
|
+ private String param = "page"; // 分页参数名称,用于支持一个页面多个分页功能
|
|
|
+ private String url = ""; // 项目路径
|
|
|
+ private String query = ""; // 当前页所有参数
|
|
|
+
|
|
|
+ public long getTotal() {
|
|
|
+ return total;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setTotal(long total) {
|
|
|
+ this.total = total;
|
|
|
+ this.initTotalPage();
|
|
|
+ }
|
|
|
+
|
|
|
+ public int getPage() {
|
|
|
+ return page;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setPage(int page) {
|
|
|
+ this.page = page;
|
|
|
+ }
|
|
|
+
|
|
|
+ public long getTotalPage() {
|
|
|
+ return totalPage;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setTotalPage(long totalPage) {
|
|
|
+ this.totalPage = totalPage;
|
|
|
+ }
|
|
|
+
|
|
|
+ public int getRows() {
|
|
|
+ return rows;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setRows(int rows) {
|
|
|
+ // 设置个最大记录数,限制单页记录过多
|
|
|
+ if (rows > 10000) {
|
|
|
+ rows = 10000;
|
|
|
+ }
|
|
|
+ this.rows = rows;
|
|
|
+ this.initTotalPage();
|
|
|
+ }
|
|
|
+
|
|
|
+ public int getStep() {
|
|
|
+ return step;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setStep(int step) {
|
|
|
+ this.step = step;
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getParam() {
|
|
|
+ return param;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setParam(String param) {
|
|
|
+ this.param = param;
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getUrl() {
|
|
|
+ return url;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setUrl(String url) {
|
|
|
+ this.url = url;
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getQuery() {
|
|
|
+ return query;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setQuery(String query) {
|
|
|
+ this.query = query;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 初始化分页信息
|
|
|
+ */
|
|
|
+ public void initTotalPage() {
|
|
|
+ totalPage = (total % rows) == 0 ? (total / rows) : ((total / rows) + 1);
|
|
|
+ if (page > totalPage) {
|
|
|
+ page = (int) totalPage;
|
|
|
+ }
|
|
|
+ if (page < 1) {
|
|
|
+ page = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成简单的分页页面内容
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public String getHtml() {
|
|
|
+ // 根据request获取当前url,包括参数,如果有已存在名称未paramname的参数,剔除掉,后面会追加新的参数
|
|
|
+ //String contextPath = request.getContextPath();
|
|
|
+ //String requestURI = request.getRequestURI();
|
|
|
+ //String url = contextPath + requestURI;
|
|
|
+ //String url = request.getRequestURI();
|
|
|
+ //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(param))
|
|
|
+ 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 / rows);// 求总页数
|
|
|
+ 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 + "&" + param + "=" + (page - 1) + "\">上一页</a>\n");
|
|
|
+ } else {
|
|
|
+ pages = pages.concat("<a class=\"prev\" href=\"" + url + "?" + param + "=" + (page - 1) + "\">上一页</a>\n");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // pages =
|
|
|
+ // pages.concat("<a class=\"prev\" href=\"javascript:;\" style=\"color:#ccc\">上一页</a>\n");
|
|
|
+ }
|
|
|
+ // 如果总页数大于要显示的个数,则拼接显示
|
|
|
+ if (pageCount > step) {
|
|
|
+ // 显示分页码
|
|
|
+ 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 + "&" + param + "=1\">1</a> ... \n");
|
|
|
+ } else {
|
|
|
+ pages = pages.concat("<a href=\"" + url + "?" + param + "=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 + "&" + param + "=" + i + "\">" + i + "</a>\n");
|
|
|
+ } else {
|
|
|
+ pages = pages.concat("<a href=\"" + url + "?" + param + "=" + 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 + "&" + param + "=" + pageCount + "\">" + pageCount + "</a>\n");
|
|
|
+ } else {
|
|
|
+ pages = pages.concat(" ... <a href=\"" + url + "?" + param + "=" + 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 + "&" + param + "=" + i + "\">" + i + "</a>\n");
|
|
|
+ } else {
|
|
|
+ pages = pages.concat("<a href=\"" + url + "?" + param + "=" + i + "\">" + i + "</a>\n");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ pages = pages.concat("<span class=\"current\">" + i + "</span>\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else { // 总页数小于等于step时,直接显示
|
|
|
+ for (int i = 1; i <= pageCount; i++) {
|
|
|
+ if (i != page) {
|
|
|
+ if (url.contains("?")) {
|
|
|
+ pages = pages.concat("<a href=\"" + url + "&" + param + "=" + i + "\">" + i + "</a>\n");
|
|
|
+ } else {
|
|
|
+ pages = pages.concat("<a href=\"" + url + "?" + param + "=" + 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 + "&" + param + "=" + (page + 1) + "\">下一页</a>\n");
|
|
|
+ } else {
|
|
|
+ pages = pages.concat("<a class=\"next\" href=\"" + url + "?" + param + "=" + (page + 1) + "\">下一页</a>\n");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // pages =
|
|
|
+ // pages.concat("<a class=\"next\" href=\"javascript:;\" style=\"color:#ccc\">下一页</a>\n");
|
|
|
+ }
|
|
|
+ return pages;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|