<SPAN style="FONT-SIZE: medium">package com.javacrazyer.web.tag;
import java.io.IOException; import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport;
/** * 分頁標(biāo)簽處理類 */ public class PagerTag extends TagSupport { private static final long serialVersionUID = 5729832874890369508L; private String url; //請(qǐng)求URI private int pageSize = 10; //每頁要顯示的記錄數(shù) private int pageNo = 1; //當(dāng)前頁號(hào) private int recordCount; //總記錄數(shù)
@SuppressWarnings("unchecked") public int doStartTag() throws JspException { int pageCount = (recordCount + pageSize - 1) / pageSize; //計(jì)算總頁數(shù) //拼寫要輸出到頁面的HTML文本 StringBuilder sb = new StringBuilder(); sb.append("<style type=\"text/css\">"); sb.append(".pagination {padding: 5px;float:right;font-size:12px;}"); sb.append(".pagination a, .pagination a:link, .pagination a:visited {padding:2px 5px;margin:2px;border:1px solid #aaaadd;text-decoration:none;color:#006699;}"); sb.append(".pagination a:hover, .pagination a:active {border: 1px solid #ff0000;color: #000;text-decoration: none;}"); sb.append(".pagination span.current {padding: 2px 5px;margin: 2px;border: 1px solid #ff0000;font-weight: bold;background-color: #ff0000;color: #FFF;}"); sb.append(".pagination span.disabled {padding: 2px 5px;margin: 2px;border: 1px solid #eee; color: #ddd;}"); sb.append("</style>\r\n"); sb.append("<div class=\"pagination\">\r\n"); if(recordCount == 0){ sb.append("<strong>沒有可顯示的項(xiàng)目</strong>\r\n"); }else{ //頁號(hào)越界處理 if(pageNo > pageCount){ pageNo = pageCount; } if(pageNo < 1){ pageNo = 1; } sb.append("<form method=\"post\" action=\"").append(this.url) .append("\" name=\"qPagerForm\">\r\n"); //獲取請(qǐng)求中的所有參數(shù) HttpServletRequest request = (HttpServletRequest) pageContext .getRequest(); Enumeration<String> enumeration = request.getParameterNames(); String name = null; //參數(shù)名 String value = null; //參數(shù)值 //把請(qǐng)求中的所有參數(shù)當(dāng)作隱藏表單域 while (enumeration.hasMoreElements()) { name = enumeration.nextElement(); value = request.getParameter(name); // 去除頁號(hào) if (name.equals("pageNo")) { if (null != value && !"".equals(value)) { pageNo = Integer.parseInt(value); } continue; } sb.append("<input type=\"hidden\" name=\"") .append(name) .append("\" value=\"") .append(value) .append("\"/>\r\n"); } // 把當(dāng)前頁號(hào)設(shè)置成請(qǐng)求參數(shù) sb.append("<input type=\"hidden\" name=\"").append("pageNo") .append("\" value=\"").append(pageNo).append("\"/>\r\n"); // 輸出統(tǒng)計(jì)數(shù)據(jù) sb.append(" 共<strong>").append(recordCount) .append("</strong>項(xiàng)") .append(",<strong>") .append(pageCount) .append("</strong>頁: \r\n"); //上一頁處理 if (pageNo == 1) { sb.append("<span class=\"disabled\">« 上一頁") .append("</span>\r\n"); } else { sb.append("<a href=\"javascript:turnOverPage(") .append((pageNo - 1)) .append(")\">« 上一頁</a>\r\n"); } //如果前面頁數(shù)過多,顯示"..." int start = 1; if(this.pageNo > 4){ start = this.pageNo - 1; sb.append("<a href=\"javascript:turnOverPage(1)\">1</a>\r\n"); sb.append("<a href=\"javascript:turnOverPage(2)\">2</a>\r\n"); sb.append("…\r\n"); } //顯示當(dāng)前頁附近的頁 int end = this.pageNo + 1; if(end > pageCount){ end = pageCount; } for(int i = start; i <= end; i++){ if(pageNo == i){ //當(dāng)前頁號(hào)不需要超鏈接 sb.append("<span class=\"current\">") .append(i) .append("</span>\r\n"); }else{ sb.append("<a href=\"javascript:turnOverPage(") .append(i) .append(")\">") .append(i) .append("</a>\r\n"); } } //如果后面頁數(shù)過多,顯示"..." if(end < pageCount - 2){ sb.append("…\r\n"); } if(end < pageCount - 1){ sb.append("<a href=\"javascript:turnOverPage(") .append(pageCount - 1) .append(")\">") .append(pageCount - 1) .append("</a>\r\n"); } if(end < pageCount){ sb.append("<a href=\"javascript:turnOverPage(") .append(pageCount) .append(")\">") .append(pageCount) .append("</a>\r\n"); } //下一頁處理 if (pageNo == pageCount) { sb.append("<span class=\"disabled\">下一頁 »") .append("</span>\r\n"); } else { sb.append("<a href=\"javascript:turnOverPage(") .append((pageNo + 1)) .append(")\">下一頁 »</a>\r\n"); } sb.append("</form>\r\n"); // 生成提交表單的JS sb.append("<script language=\"javascript\">\r\n"); sb.append(" function turnOverPage(no){\r\n"); sb.append(" if(no>").append(pageCount).append("){"); sb.append(" no=").append(pageCount).append(";}\r\n"); sb.append(" if(no<1){no=1;}\r\n"); sb.append(" document.qPagerForm.pageNo.value=no;\r\n"); sb.append(" document.qPagerForm.submit();\r\n"); sb.append(" }\r\n"); sb.append("</script>\r\n"); } sb.append("</div>\r\n"); //把生成的HTML輸出到響應(yīng)中 try { pageContext.getOut().println(sb.toString()); } catch (IOException e) { throw new JspException(e); } return SKIP_BODY; //本標(biāo)簽主體為空,所以直接跳過主體 }
public void setUrl(String url) { this.url = url; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public void setPageNo(int pageNo) { this.pageNo = pageNo; } public void setRecordCount(int recordCount) { this.recordCount = recordCount; } }</SPAN> |