JSP自定义标签--分页
2017-04-18 14:45
323 查看
1.controller
public static int PAGE_NUMERIC = 20;//每页最大条数 @RequestMapping(value = "/qrQuery") public String merQuery(final ModelMap model, @RequestParam Map<String, String> params, @RequestParam(value = "p", defaultValue = "1") int cpage) throws Exception { PageRequest page = new PageRequest(cpage - 1, PAGE_NUMERIC); String userLimit = sysDeptService.getSaleIdLimitStr(); params.put("userLimit", userLimit); Page<Map<String, Object>> list = qrService.qrQuery(params,page); List<Map<String, String>> agentlist=agentService.getLevel1_AgentInfo(userLimit); model.put("agentlist", agentlist); model.put("p", cpage); model.put("list", list); model.put("params", params); return "/jsp.jsp"; }
2.继承BodyTagSupport的标签类
package com.oleka.boss.utils.tag; import java.io.IOException; import java.util.Arrays; import java.util.Enumeration; import javax.servlet.ServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.BodyTagSupport; /** * 一个自定义的简单分页工具 * * */ @SuppressWarnings("serial") public class Pagebar extends BodyTagSupport { /** * 总页数 */ private int total; /** * 总条数 */ private int count; /** * 当前页码 */ private int current; /** * 需要忽略的参数 */ private String skipParams; /** * 分页名称 * * ?p=1, ?p=2 * 默认为 p, 如果单个页面有多个 pagebar 需要放置, * 每个都有自己的分页名称, 需要设置改参数 */ private String p = "p"; /* (non-Javadoc) * @see javax.servlet.jsp.tagext.BodyTagSupport#doStartTag() */ @Override @SuppressWarnings("unchecked") public int doStartTag() throws JspException { ServletRequest req = pageContext.getRequest(); Enumeration<String> paramsName = req.getParameterNames(); String[] skips = null; if (skipParams != null) { skips = skipParams.split(","); Arrays.sort(skips); } StringBuilder sb = new StringBuilder(); while (paramsName.hasMoreElements()) { String param = paramsName.nextElement(); if ("p".equalsIgnoreCase(param)) { continue; } // skip if (skips != null) { if (Arrays.binarySearch(skips, param) >= 0) { continue; } } String[] vs = req.getParameterValues(param); for (String v : vs) { sb.append("&"); sb.append(param).append("=").append(v); } } String params = sb.length() > 0 ? sb.toString() : null; JspWriter out = pageContext.getOut(); try { if (current > total || current <= 0 || total <= 0) { out.append("<div class=\"pagebar\">\n"); out.append("\t<span class=\"error\"><!--页码错误--></span>\n"); out.append("<input id='pageLink' type='hidden' value= '").append(params).append("' />"); return super.doStartTag(); } out.append("<div class=\"pagination\">\n"); out.append("\t<span class=\"spantxt\">"); out.append("共").append(Integer.toString(count)).append("条记录,"); out.append("第").append(Integer.toString(current)).append("页/共").append(Integer.toString(total)).append("页 "); out.append(" "); out.append("跳转到第<input type=\"text\" name=\"topage\" id=\"topage\" class=\"input-text \" style=\"margin-bottom: 5;\" size=\"5\" />页"); out.append("<script type=\"text/javascript\">"); /*out.append("function toPage(){ var topage=$(\"#topage\").val(); locationHref('").append(buildLink(topage, params)).append("')");*/ out.append("function toPage(){ var topage=$(\"#topage\").val();if(!isNaN(topage)&&topage>0&&topage<="+total+"){locationHref('?p='+topage)}else{alert(\"请输入1-"+total+"之间的数字\");} }"); out.append("$(function(){var Request=new UrlSearch();$(\"#topage\").val(Request.p)});"); out.append("</script>"); out.append("<input type=\"button\" value=\"跳转\" onclick=\"toPage()\" class=\"btn btn82 btn_search\" style=\"margin-bottom: 5;\" >"); out.append("</span><br>\n"); out.append("<input id='pageLink' type='hidden' value= '").append(buildLink(current, params)).append("' />"); out.append("<ul>\n"); if (total == 1) { return super.doStartTag(); } if (current != 1) { out.append("\t<li class=\"first-child\"><a href=\"javascript:locationHref('").append(buildLink(1, params)).append("');\" title=\"首页\">首页</a></li>\n"); } else { out.append("\t<li class=\"first-child disabled\"><span>首页</span></li>\n"); } if (current > 1) { out.append("\t<li><a href=\"javascript:locationHref('").append(buildLink(current - 1, params)).append("');\" title=\"上页\">上页</a></li>\n"); } else { out.append("\t<li class=\"disabled\"><span>上页</span></li>\n"); } if (total > 10) { int g = current % 10; int next = 10; if (g > 5) { next = current - g + 20; } else { next = current - g + 10; } int prev = 0; if (g > 5) { prev = current - g - 10; } else { prev = current - g - 20; } if (prev < 0) { prev = 0; } if (current >= 1 && current < 4) { appendLinks(out, params, 1, 5); appendExtend(out); if (total > 10) { appendLinks(out, params, 10, 10); appendExtend(out); } } else if (current >= aac2 4 && current < total - 3) { if (prev > 0) { if (prev > 1) { appendExtend(out); } appendLinks(out, params, prev, prev); } appendExtend(out); appendLinks(out, params, current - 2, current + 2); appendExtend(out); if (next < total) { appendLinks(out, params, next, next); appendExtend(out); } } else { if (prev > 1) { appendExtend(out); } if (prev == 0) { prev = 1; } appendLinks(out, params, prev, prev); appendExtend(out); appendLinks(out, params, current - 3, total); } } else { appendLinks(out, params, 1, total); } if (current < total) { out.append("\t<li><a href=\"javascript:locationHref('").append(buildLink(current + 1, params)).append("');\" title=\"下页\">下页</a></li>"); } else { out.append("\t<li class=\"disabled\"><span >下页</span>"); } if (current != total) { out.append("\t<li class=\"last-child\"><a href=\"javascript:locationHref('").append(buildLink(total, params)).append("');\" title=\"尾页\">尾页</a></li>\n"); } else { out.append("\t<li class=\"last-child disabled\"><span>尾页</span>\n"); } out.append("</ul>\n"); } catch (IOException e) { throw new JspException(e); } return super.doStartTag(); } /** * @param out * @throws IOException */ private void appendExtend(JspWriter out) throws IOException { out.append("\t<li class=\"disabled\"><span>...</span></li>\n"); } /** * @param i * @param params * @return */ private CharSequence buildLink(int i, String params) { StringBuilder sb = new StringBuilder(); sb.append("?").append(p).append("=").append(i); if (params != null) { sb.append(params); } return sb.toString(); } /** * @param out * @param string * @param end * @param start * @throws IOException */ private void appendLinks(JspWriter out, String link, int start, int end) throws IOException { for (int i = start; i <= end; i++) { String page = Integer.toString(i); if (i == current) { out.append("\t<li class=\"disabled\"><span title=\"第").append(page).append("页\">").append(page).append("</span></li>\n"); } else { out.append("\t<li><a href=\"javascript:locationHref('").append(buildLink(i, link)).append("');\" title=\"第") .append(page).append("页\">").append(page).append("</a></li>\n"); } } } /* (non-Javadoc) * @see javax.servlet.jsp.tagext.BodyTagSupport#doEndTag() */ @Override public int doEndTag() throws JspException { JspWriter out = this.pageContext.getOut(); try { out.append("\n</div>"); } catch (IOException e) { throw new JspException(e); } return super.doEndTag(); } public void setCount(int count) { this.count = count; } public void setTotal(int total) { this.total = total; } public void setCurrent(int current) { this.current = current; } public void setSkipParams(String skipParams) { if (skipParams != null) { skipParams = skipParams.trim(); } if (skipParams.length() > 0) { this.skipParams = skipParams; } else { this.skipParams = null; } } /** * @param p set p */ public void setP(String p) { if (p == null) { p = "p"; } else { p = p.trim(); } this.p = p; } }
3.JSP页面
<%@ taglib prefix ="pagebar" uri="/WEB-INF/pagebar.tld" %> <div class="page mt10"> <pagebar:pagebar total="${list.totalPages}" current="${list.number + 1}" count="${list.totalElements}" /> </div>
相关文章推荐
- 相当强的分页,表格生成的JSP自定义标签
- jsp中用自定义标签实现简单的分页
- jsp自定义标签实现分页
- JSP自定义标签开发(八)—— xx.tag自定义标签开发之分页标签(jquery + div +css 美化)
- 由浅到深详细讲解JSP自定义标签
- JSP自定义标签(2):带属性的自定义标签
- sqlserver mysql jsp 分页
- 分页复用代码【Page类、JSP显示页面】
- JSP自定义标签例子
- 如何为自己的jsp页面创建分页标签
- JSP实现添加功能和分页显示实例分析
- 一个简单的分页例子,采用JSP+oracle编写
- jsp 自定义标签
- JSP自定义标签
- JSP自定义标签控制JSP内容显示&&自定义标签详解
- jsp自定义标签例子
- 掌握jsp自定义标签:(二)
- Web开发中一种用sql语句完成分页的高效率方法,以jsp/asp为例
- JSP分页