您的位置:首页 > Web前端 > JavaScript

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: