package com.connxun.util.page; /** * 类说明:页码显示效果类 。1:TextModel “第一页 上一页 下一页 最后一页”;2:NumModel “第一页 2 3 4 最后一页”; * * @author 作者: 高宇飞 * @version 创建时间:2016-01-10 */ public class PageNavigate { /** * 文本类型:形如:“第一页 上一页 下一页 最后一页” */ public static final int TEXT_MODEL = 1; /** * 数字类型:形如:NumModel “第一页 2 3 4 最后一页” */ public static final int NUM_MODEL = 2; /** * 页码显示模型 */ private int model = 2; /** * 页码连接URL,不需要添加页码参数 */ private String url; /** * 当前页 */ private int pageIndex; /** * 每页多少条记录 */ private int pageSize;// /** * 记录总数 */ private int recordCount;// /** * 模型类型的页码 */ private StringBuffer strHtml = null; /** * 数字类型的页码模型中间数字显示个数,例如:第一页 1 2 3 4 5 最后一页,numCount = 5; 默认显示 5个数字 */ private int numCount = 5; private int countPage;// 共有多少页 /** * 页码的模式默认的文字类型的样式 * * @param page * 页面信息 * @param url * 页面的url地址 */ public PageNavigate(String url, int pageIndex, int pageSize, int recordCount) { super(); this.url = url; this.pageIndex = pageIndex; this.pageSize = pageSize; this.recordCount = recordCount; countPage = calPageCount(recordCount, pageSize); if (pageIndex > countPage && countPage > 0) this.pageIndex = countPage; } public int getPageIndex() { return pageIndex; } public void setPageIndex(int pageIndex) { this.pageIndex = pageIndex; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getRecordCount() { return recordCount; } public void setRecordCount(int recordCount) { this.recordCount = recordCount; } /** * 页码的模型 * * @param page * 页面信息 * @param url * 页面的url地址 * @param model * 页码的显示样式 */ public PageNavigate(String url, int pageIndex, int pageSize, int recordCount, int model) { super(); this.model = model; this.url = url; this.pageIndex = pageIndex; this.pageSize = pageSize; this.recordCount = recordCount; } /** * 页码的模型 * * @param page * 页面信息 * @param url * 页面的url地址 * @param model * 页码的显示样式 * @param numCount * 数字类型的页码,共显示的个数 */ public PageNavigate(String url, int pageIndex, int pageSize, int recordCount, int model, int numCount) { super(); this.model = model; this.url = url; this.numCount = numCount; this.pageIndex = pageIndex; this.pageSize = pageSize; this.recordCount = recordCount; } /** * 返回页面的模型 * * @return */ public String getPageModel() { // 组装页码模型 createURL(); return createModel(); } /** * 构建URL */ private void createURL() { url = url.contains("?") ? url + "&pageIndex=" : url + "?pageIndex="; } /** * 组装页码模型 */ private String createModel() { strHtml = new StringBuffer(); switch (model) { case TEXT_MODEL:// 文本模型 buildTextModel(); break; case NUM_MODEL:// 数字模型 buildNumModel(); break; default:// 文本模型 buildNumModel(); break; } return strHtml.toString(); } /** * 组件数字类型的页码模型 */ private void buildNumModel() { int currentPage = pageIndex > countPage ? 1 : pageIndex; if (recordCount != 0) { strHtml.append("<div class=\"col-xs-6 text-left\"><ul class=\"pagination\">"); // 构造格式:第一页 1 2 3 4 5 最后一页 PageIndex pageIndex = PageIndex.getPageIndex(numCount, currentPage, countPage); // 不是第一页时,显示首页 if (currentPage > 1) { strHtml.append("<li><a href=\"").append(url).append(1).append("\"><i class=\"fa fa-angle-double-left\"></i></a></li>"); // 显示上一页 strHtml.append("<li><a href=\"").append(url).append(currentPage - 1).append("\"><i class=\"fa fa-angle-left\"></i></a></li>"); } else { strHtml.append("<li class=\"disabled\"><a href=\"javascript:;").append("\"><i class=\"fa fa-angle-double-left\"></i></a></li>"); // 显示上一页 strHtml.append("<li class=\"disabled\"><a href=\"javascript:;").append("\"><i class=\"fa fa-angle-left\"></i></a></li>"); } if (currentPage <= countPage) { for (int i = pageIndex.getStartIndex(); i <= pageIndex.getEndIndex(); i++) { if (currentPage == i) { strHtml.append("<li class=\"active\"><a href=\"javascript:;").append("\">").append(i).append(" </a></li>"); } else { strHtml.append("<li><a href=\"").append(url).append(i).append("\">").append(i).append(" </a></li>"); } } } // 显示下一页 if (currentPage < countPage) { strHtml.append("<li><a href=\"").append(url).append(currentPage + 1).append("\"><i class=\"fa fa-angle-right\"></i></a></li>"); // 显示最后一页 strHtml.append("<li><a href=\"").append(url).append(countPage).append("\"> <i class=\"fa fa-angle-double-right\"></i></a></li>"); } else { strHtml.append("<li class=\"disabled\"><a href=\"javascript:;").append("\"><i class=\"fa fa-angle-right\"></i></a></li>"); // 显示最后一页 strHtml.append("<li class=\"disabled\"><a href=\"javascript:;").append("\"><i class=\"fa fa-angle-double-right\"></i></a></li>"); } if(countPage >1){ //新增指定跳转页面 strHtml.append("<li><input type=\"text\"data-recordCount=\"").append(recordCount).append("\" data-maxpage=\"").append(countPage).append("\" data-url=\"").append(url) .append("\" style=\"width: 60px;height:33px;margin-left:5px;\" id=\"inputcount\" value=\"\"><button type=\"button\" οnclick=\"pageHref()\"" + " class=\"btn btn-sm btn-primary\" style=\"margin-top:-3px;\">跳转</button></li>"); } strHtml.append("</ul></div>"); } else { strHtml.append("<div class=\"col-xs-6 maringTop10 text-right\"></div>"); } if (recordCount == 0) strHtml.append("<div class=\"col-xs-6 maringTop10 text-right\">没有数据</div>"); else strHtml.append("<div class=\"col-xs-6 maringTop10 text-right\">当前显示").append(calCurShow(currentPage, pageSize, recordCount, countPage)).append("条,共").append(recordCount) .append("条记录</div>"); } /** * 组件文本类型的页码 */ private void buildTextModel() { int currentPage = pageIndex > countPage ? 1 : pageIndex; strHtml.append("<table width='100%' border='0' cellspacing='0' cellpadding='0'>").append("<tr> <td height='24' align='center'>当前页数:[").append(currentPage).append("/").append(countPage) .append("] "); if (currentPage > 1) { strHtml.append("<a href='").append(url).append("1'>首页</a>").append(" <a href='").append(url).append(currentPage - 1).append("'>上一页</a>"); } if (currentPage < countPage) { strHtml.append(" <a href='").append(url).append(currentPage + 1).append("'>下一页</a> <a href='").append(url).append(countPage).append("'>末页</a>"); } strHtml.append("</td></tr></table>"); } /** * 计算总共有多少页 * * @return */ private int calPageCount(int recordCount, int pageSize) { return (recordCount % pageSize == 0) ? (recordCount / pageSize) : (recordCount / pageSize + 1); } // 计算当前显示的记录数 private String calCurShow(int pageIndex, int pageSize, int recordCount, int pageCount) { String str = ""; if (pageIndex < pageCount) str = (pageIndex - 1) * pageSize + 1 + "-" + ((pageIndex - 1) * pageSize + pageSize); else { str = (pageIndex - 1) * pageSize + 1 + "-" + (recordCount); } return str; } }