/** date: 2013-11-25 author: Limind */ package com.zjht.util; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; import com.zjht.common.Page; /** * doStartTag()和doEndTag()返回值处理: SKIP_BODY (0) :跳过了开始和结束标签之间的代码。 * EVAL_BODY_INCLUDE(1):将body的内容输出到存在的输出流中 SKIP_PAGE(5): 忽略剩下的页面。 * EVAL_PAGE隐含(6):继续执行下面的页 * * @author Limind * @date 2013-11-25下午5:35:42 */ public class PageTag extends TagSupport { private String url; public String getUrl() { return this.url; } public void setUrl(String url) { this.url = url; } public int doEndTag() throws JspException { return EVAL_PAGE; } public int doStartTag() throws JspException { HttpServletRequest request = (HttpServletRequest) this.pageContext .getRequest(); // 获取分页bean Page page = (Page) request.getAttribute("page"); JspWriter out = this.pageContext.getOut(); // 拼接分页信息 StringBuilder s = new StringBuilder(); // 设置分页样式 s = PageCss.getStyle(); s.append("
"); s.append("共" + ((page.getTotal() - 1) / page.getPageSize() + 1) + "页   "); // 设置当前页第一条记录索引 String pageJspNumber = request.getParameter("pageJspNumber"); if (pageJspNumber != null && !"".equals(pageJspNumber)) { page.getPageable() .setPageJspNumber(Integer.parseInt(pageJspNumber)); } if (page.getTotal() > page.getPageSize()) { // 获取连接符pref String pref; if (this.url.indexOf("?") > -1) { pref = "&"; } else { pref = "?"; } this.doStart(s, page, pref); this.doBody(s, page, pref); this.doEnd(s, page, pref); } else { s.append("    "); } s.append(" 共" + page.getTotal() + "条记录"); s.append("    跳转到 页 "); s.append("GO\n"); s.append("
"); try { out.println(s.toString()); } catch (IOException e) { e.printStackTrace(); } return SKIP_BODY; } /** * //拼接"首页"和"<" * @param s * @param page * @param pref */ public void doStart(StringBuilder s, Page page, String pref) { if (page.getPageJspNumber() > 0) { s.append("首页\n" + "上页\n"); } else { s.append("首页\n"); } } /** * 拼接"尾页"和">" * * @param s * @param page * @param pref */ public void doEnd(StringBuilder s, Page page, String pref) { if (page.getPageJspNumber() < page.getTotal() - page.getPageSize()) { s.append("下页\n" + "尾页\n"); } else { s.append("\n" + "尾页\n"); } } /** * 数字连接 * * @param s * @param page * @param pref */ public void doBody(StringBuilder s, Page page, String pref) { // 显示半径 int radius = page.getPageable().MAX_PAGE_INDEX / 2 * page.getPageSize(); // 显示数字的连接从第几条开始 int startOffset; if ((page.getPageJspNumber() < radius) || (page.getTotalPages() <= page.getPageable().MAX_PAGE_INDEX)) { startOffset = 0; } else { if (page.getPageJspNumber() < page.getTotal() - radius) { startOffset = page.getPageJspNumber() - radius; } else { startOffset = (int) ((page.getTotal() / page.getPageSize() - page .getPageable().MAX_PAGE_INDEX) * page.getPageSize()); } } for (int i = startOffset; (i < page.getTotal()) && (i < startOffset + page.getPageable().MAX_PAGE_INDEX * page.getPageSize());) { if (i == page.getPageJspNumber()) { s.append("" + (i / page.getPageSize() + 1) + "\n"); } else { s.append("" + (i / page.getPageSize() + 1) + "\n"); } i += page.getPageSize(); } } }