jsp-定義帶標籤體的標籤__js

來源:互聯網
上載者:User
 jsp-定義帶標籤體的標籤--loop
到目前為止,我們定義的都是不帶標籤體的自訂標籤。要定義帶標籤體的類要繼承BodyTagSupport類,BodyTagSupport擴充了TagSupport類,因此doStartTag和doEndTag方法和前面所講的一樣,除了這些方法外BodyTagSupport類還定義了兩個重要方法,
1:doAfterBody-該方法每次處理完標籤體都要執行。可以重載這個方法來處理自己的標籤體,這個方法在結束時通常返回SKIP_BODY,指明沒有標籤體需要繼續處理了,如果這個方法返回EVAL_BODY_TAG,則這個標籤體被再次處理,並導致有一次doAfterBody的調用,這種處理將一直持續到doAfterBody返回SKIP_BODY
2:doInitBody--標籤體初始化方法。
另外,BodyTagSupport定義了一個成員變數bodyContent,類型是BodyContent。BodyContent是JspWriter的一個子類,通過該類可以訪問標籤體,該類中儲存了對標籤體的處理結果,該類的主要方法如下
1:getEnclosingWriter--用來返回doStartTag和doEndTag方法使用的JspWriter對象。
2:getReader--將返回一個Reader可用來讀取標籤體
3:getString---會返回整個標籤體包含的字串
4:clearBody--清空儲存的標籤體處理結果

下面還是通過範例來掌握一下此類標籤。
loopTag.java代碼如下
package tag.test.date;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.*;
public class loopTag extends BodyTagSupport{
 String userName;
 int count;
 public loopTag(){
  super();
 }
 public void setUserName(String userName){
  this.userName=userName;
 }
 public void setCount(int count){
  this.count=count;
 }
 public void doInitBody()throws JspTagException{
  System.out.println("doInitBody()");
 }
 public int doStartTag()throws JspTagException{
       System.out.println("doStartTag");
       if(count>0)
       {
        return EVAL_BODY_TAG;
       }
       else
       {
        return SKIP_BODY;
       }
 }
 public int doAfterBody()throws JspTagException{
  System.out.println("doAfterBody()");
  if(count-->=1)
  {
   try
   {
    JspWriter out=bodyContent.getEnclosingWriter();
    out.println(bodyContent.getString()+userName);
    out.println("<br>");
    bodyContent.clearBody();
   }
   catch(IOException e)
   {
    e.printStackTrace();
   }
   return(EVAL_BODY_TAG);
  }
  else
  {
   return (SKIP_BODY);
  }
 }
 public int doEndTag()throws JspTagException{
  System.out.println("doEndTag()");
  return EVAL_PAGE;
 }
}
編譯好此檔案後把所產生的類拷貝到C:/tomcat/webapps/ROOT/WEB-INF/classes/tag/test/date目錄下,

然後編寫.tld檔案代碼,代碼如下
<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib>
   <tlib-version>1.2</tlib-version>
   <jsp-version>1.2</jsp-version>
   <shor-name>mytag</shor-name>
   <description>the info test example</description>
   <tag>
     <name>loop</name>
     <tag-class>tag.test.date.loopTag</tag-class>
     <body-content>jsp</body-content>
       <attribute>
         <name>userName</name>
         <required>true</required>
         <rtexprvalue>true</rtexprvalue>
       </attribute>
        <attribute>
         <name>count</name>
         <required>true</required>
         <rtexprvalue>true</rtexprvalue>
       </attribute>
   </tag>
</taglib>
這裡注意的是<body-content>jsp</body-content>中的內容必須為jsp

注意此檔案存放的路徑為C:/tomcat/webapps/ROOT/WEB-INF

在然後修改web.xml檔案,也就是向web.xml中添加下面內容
    <taglib>
      <taglib-uri>/loop</taglib-uri>
      <taglib-location>/WEB-INF/loopTag.tld</taglib-location>
    </taglib>

最後就是編寫loopTag.jsp檔案了,代碼如下
<%@ taglib uri="/loop" prefix="mytag" %>
<html>
  <head>
    <title>custom tag</title>
  </head>
  <body>
    <hr>
      <mytag:loop userName="hua" count="3">
        hello I'm
       </mytag:loop>
    </hr>
  </body>
</html>

注意:JSP代碼中的<%@ taglib uri="/loop" prefix="mydate" %>uri值必須和web.xml中的<taglib-uri>/loop</taglib-uri>值一致。
做好上面的工作後,啟動tomcat,在地址攔中輸入http://localhost:8080/loopTag.jsp 後就會看到下面的結果
hello I'm hua
hello I'm hua
hello I'm hua
好通過上面的講解你一定對JSP的帶標籤體自訂標籤有了一定的瞭解,現在就自己動手來實驗一下把。
如果有什麼問題請聯絡QQ:154174583

你可以通過這個連結引用該篇文章:http://aspjavavbc.bokee.com/viewdiary.18893261.html  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.