package com.itheima.common.utils; import java.io.IOException; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; /** * 显示格式:首页 上一页 1 2 3 4 5下一页 尾页 */ public class NavigationTag extends TagSupport { static final long serialVersionUID = 2372405317744358833L; /** * request 中用于保存Page<E> 对象的变量名,默认为“page” */ private String bean = "page"; /** * 分页跳转的url地址,此属性必须 */ private String url = null; /** * 显示页码数量 */ private int number = 5; @Override public int doStartTag() throws JspException { JspWriter writer = pageContext.getOut(); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); Page page = (Page) request.getAttribute(bean); if (page == null) return SKIP_BODY; url = resolveUrl(url, pageContext); try { // 计算总页数 int pageCount = page.getTotal() / page.getSize(); if (page.getTotal() % page.getSize() > 0) { pageCount++; } writer.print("<nav><ul class=\"pagination\">"); //首页链接路径 String homeUrl = append(url, "page", 1); //末页链接路径 String backUrl = append(url, "page", pageCount); // 显示“上一页”按钮 if (page.getPage() > 1) { String preUrl = append(url, "page", page.getPage() - 1); preUrl = append(preUrl, "rows", page.getSize()); writer.print("<li><a href=\"" + homeUrl + "\">" + "首页</a></li>"); writer.print("<li><a href=\"" + preUrl + "\">" + "上一页</a></li>"); } else { writer.print("<li class=\"disabled\"><a href=\"#\">" + "首页 </a></li>"); writer.print("<li class=\"disabled\"><a href=\"#\">" + "上一页 </a></li>"); } // 显示当前页码的前2页码和后两页码 // 若1 则 1 2 3 4 5, 若2 则 1 2 3 4 5, 若3 则1 2 3 4 5, // 若4 则 2 3 4 5 6 ,若10 则 8 9 10 11 12 int indexPage =1; if(page.getPage() - 2 <=0){ indexPage=1; }else if(pageCount-page.getPage() <=2){ indexPage=pageCount-4; }else{ indexPage= page.getPage() - 2; } for (int i= 1;i <= number && indexPage <= pageCount;indexPage++,i++){ if (indexPage == page.getPage()) { writer.print("<li class=\"active\"><a href=\"#\">" + indexPage +"<spanclass=\"sr-only\"></span></a></li>"); continue; } String pageUrl = append(url, "page", indexPage); pageUrl = append(pageUrl, "rows", page.getSize()); writer.print("<li><a href=\"" + pageUrl + "\">" + indexPage + "</a></li>"); } // 显示“下一页”按钮 if (page.getPage() < pageCount) { String nextUrl = append(url, "page", page.getPage() + 1); nextUrl = append(nextUrl, "rows", page.getSize()); writer.print("<li><a href=\"" + nextUrl + "\">" + "下一页</a></li>"); writer.print("<li><a href=\"" + backUrl + "\">" + "尾页</a></li>"); } else { writer.print("<li class=\"disabled\"><a href=\"#\">" + "下一页</a></li>"); writer.print("<li class=\"disabled\"><a href=\"#\">" + "尾页</a></li>"); } writer.print("</nav>"); } catch (IOException e) { e.printStackTrace(); } return SKIP_BODY; } private String append(String url, String key, int value) { return append(url, key, String.valueOf(value)); } /** * 为url 参加参数对儿 */ private String append(String url, String key, String value) { if (url == null || url.trim().length() == 0) { return ""; } if (url.indexOf("?") == -1) { url = url + "?" + key + "=" + value; } else { if (url.endsWith("?")) { url = url + key + "=" + value; } else { url = url + "&" + key + "=" + value; } } return url; } /** * 为url 添加翻页请求参数 */ private String resolveUrl(String url, javax.servlet.jsp.PageContext pageContext) throws JspException { Map params = pageContext.getRequest().getParameterMap(); for (Object key : params.keySet()) { if ("page".equals(key) || "rows".equals(key)){ continue; } Object value = params.get(key); if (value == null){ continue; } if (value.getClass().isArray()) { url = append(url, key.toString(), ((String[]) value)[0]); } else if (value instanceof String) { url = append(url, key.toString(), value.toString()); } } return url; } public String getBean() { return bean; } public void setBean(String bean) { this.bean = bean; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public void setNumber(int number) { this.number = number; } }

GUANG001 LV1
2024年6月17日
2131234536546 LV7
2024年3月31日
周敏国 LV9
2023年9月4日
ExamplesDYC LV13
2023年8月31日
yangbulx LV3
2023年6月7日
海棠花瘦 LV9
2023年5月24日
meizugm LV1
2023年3月9日
nanqindaxia LV2
2023年3月3日
46900596 LV12
2023年3月1日
qweqweqwesfasfassada LV4
2022年12月30日

sccs1984 LV15
4月7日
ma406805131 LV19
2024年12月9日
warmgzy
2024年11月13日
暂无贡献等级
bluerstar LV1
2024年10月23日
微信网友_7151914139078656 LV2
2024年9月4日
799743530 LV11
2024年7月11日
TY0165 LV20
2024年6月25日
GUANG001 LV1
2024年6月17日
hmf1989
2024年4月26日
暂无贡献等级
2131234536546 LV7
2024年3月31日