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