自定義標籤

自定義標籤

package com.ssh2.util;

002  
003 import java.io.IOException;
004  
005 import javax.servlet.http.HttpServletRequest;
006 import javax.servlet.jsp.JspException;
007 import javax.servlet.jsp.JspWriter;
008 import javax.servlet.jsp.tagext.TagSupport;
009  
010 public class PageTag extends TagSupport {
011  
012     private String url;
013  
014     public String getUrl() {
015         return url;
016     }
017  
018     public void setUrl(String url) {
019         this.url = url;
020     }
021  
022     @Override
023     public int doEndTag() throws JspException {
024  
025         return this.EVAL_PAGE;
026     }
027  
028     @Override
029     public int doStartTag() throws JspException {
030         // 獲得當前頁面對應的Request對象
031         HttpServletRequest request = (HttpServletRequest) pageContext
032                 .getRequest();
033         // 獲得當前保存Request對象中pageBean
034         Pager pager = (Pager) request.getAttribute("pager");
035         // out--->JspWriter
036         JspWriter out = pageContext.getOut();
037         StringBuilder s = new StringBuilder();
038          
039          
040             s.append("共"+((pager.getSize()-1)/pager.getLength()+1)+"頁   ");        
041          
042          
043          
044         if (pager.getSize() >pager.getLength()) {
045         String pref; // 前綴
046         if (url.indexOf("?") > -1) {
047             // 如果url中已經包含了其他的參數,就把offset參數接在後面
048             pref = "&";
049         } else {
050             // 如果url中沒有別的參數
051             pref = "?";
052         }
053         // 如果導航條包含header
054         if (pager.getPageHeader() != null && pager.getPageHeader().length() > 0) {
055              
056         }
057         // 如果不是第一頁,導航條將包含“<<”(第一頁)和“<”(前一頁)
058         if (pager.getOffset() > 0) {
059              
060             s.append( "<a href='" + url + pref
061                     + "current=0'>[首頁]</a>\n" + "<a href='" + url + pref
062                     + "current=" + (pager.getOffset() - pager.getLength()) + "'>[<]</a>\n");
063         }
064         // 導航條中,排頭的那一頁的current值
065         int startOffset;
066         // 位於導航條中間的那一頁的current值(索引值)
067         int radius = Constants.MAX_PAGE_INDEX / 2 * pager.getLength();
068         // 如果當前的current值小於索引值
069         if (pager.getOffset() < radius
070                 || pager.pageCount() <= Constants.MAX_PAGE_INDEX) {
071             // 那麼第一頁排頭
072             startOffset = 0;
073         } else if (pager.getOffset() < pager.getSize() - radius) {
074             startOffset = pager.getOffset() - radius;
075         } else {
076             startOffset = (pager.getSize() / pager.getLength() - Constants.MAX_PAGE_INDEX)
077                     * pager.getLength();
078         }
079         for (int i = startOffset; i < pager.getSize()
080                 && i < startOffset + Constants.MAX_PAGE_INDEX * pager.getLength(); i += pager.getLength()) {
081             if (i == pager.getOffset()) {
082                 // 當前頁號,加粗顯示
083                 s.append( "<b>" + (i / pager.getLength() + 1) + "</b>\n");
084             } else {
085                 // 其他頁號,包含超鏈接
086                 s.append( "<a href='" + url + pref + "current=" + i
087                         + "'>" + (i / pager.getLength() + 1) + "</a>\n");
088             }
089         }
090         // 如果不是最後一頁,導航條將包含“>”(下一頁)和“>>”(最後一頁)
091         if (pager.getOffset() < pager.getSize() - pager.getLength()) {
092             s.append( "<a href='" + url + pref + "current="
093                     + (pager.getOffset() + pager.getLength()) + "'>[>]</a>\n" + "<a href='"
094                     + url + pref + "current=" + pager.lastPageOffset()
095                     + "'>[尾頁]</a>\n");
096         }
097          
098     }
099     // 記錄不超過一頁,不需要分頁
100     else {
101         s.append("  ");
102     }
103         s.append("  "+pager.getSize()+"條記錄");
104         try {
105              
106             out.println(s.toString());
107              
108         } catch (IOException e) {
109             // TODO Auto-generated catch block
110             e.printStackTrace();
111         }
112      
113          
114         return this.SKIP_BODY;
115     }
116  
117

}

 

tld

<?xml version="1.0" encoding="utf-8" ?>

 

02 <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
03  
04 <taglib>
05  
06     <tlib-version>2.5</tlib-version>
07     <jsp-version>1.2</jsp-version>
08     <short-name>mypage</short-name>
09     <uri>http://www.xiaoyun.test</uri>
10     <tag>
11         <name>page</name>
12         <tag-class>com.ssh2.util.PageTag</tag-class>
13         <body-content>pg</body-content>
14         <attribute>
15             <name>url</name>
16             <required>true</required>
17             <rtexprvalue>true</rtexprvalue>
18         </attribute>
19     </tag>
20      
21 </taglib>

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章