jsp 定製標籤(Custom Tag)

來源:互聯網
上載者:User

怎樣自己定製標籤(Custom Tag)
(整理的學習筆記)
步驟1、建立一個Tag handler class(標記處理器類)
package javax.servlet.jsp.tagext
開發空Body的標籤處理器類----->1)implements Tag 2)extends TagSupport
空Body的標籤處理器類需要覆蓋方法:
doStartTag()
傳回值:Tag.SKIP_BODY
doEndTag()
傳回值:
1)Tag.EVAL_PAGE:讓標籤下面的內容繼續執行
2)Tag.SKIP_PAGE:讓標籤下面的內容不執行
開發帶Body的標籤處理器類----->1)implements BodyTag 2)extends BodyTagSupport
帶Body的標籤處理器類需要覆蓋方法
doStartTag()
傳回值:
BodyTag.SKIP_BODY:執行後直接調用doEndTag()方法
BodyTag.EVAL_BODY_INCLUDE:執行後直接調用doAfterBody()方法
BodyTag.EVAL_BODY_BUFFERED:
doEndTag()
傳回值:
BodyTag.EVAL_PAGE:標籤下面的內容繼續執行
BodyTag.SKIP_PAGE:標籤下面的內容不執行
doAfterBody()
傳回值:
BodyTag.SKIP_BODY:執行後調用doEngTag()方法
BodyTag.EVAL_BODY_AGAIN:執行後調用doAfterBody()方法
步驟2、建立一個tld檔案(tag library descriptor)
一個XML格式的檔案,用於對標記進行描述
通常放在WEB-INF目錄下 (/WEB-INF/*.tld)
abc.tld
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- template test -->
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>tagSample</short-name>
<uri>/tagSample</uri>
<description>A blank tag library template.</description>
<tag>
<name>welcome</name>
<tag-class>tagapp.HelloTag</tag-class>
<body-content>empty</body-content>
<display-name>my first tag</display-name>
<small-icon> </small-icon>
<large-icon> </large-icon>
<description> </description>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
</attribute>
</tag>
</taglib>
步驟3.建立一個JSP檔案
<%@taglib uri="[tld_url]" prefix=""%>
<%@taglib uri="/WEB-INF/abc.tld" prefix="mike"%>
...
<mike:welcome name=""/>
uri的值可以是:
A、/WEB-INF/mytag.tld -----> uri="/WEB-INF/mytag.tld"
B、tld檔案中 <uri>/tagSample</uri> ------> uri="/tagSample"
C、利用web.xml檔案對應tld檔案與taglib-uri的值 -----> uri="/abc"
<taglib>
<taglib-uri>/abc</taglib-uri>
<taglib-location>/WEB-INF/mytag.tld</taglib-location>
</taglib>
帶Body的標籤處理器類的方法的注釋:
doStartTag()
return value: SKIP_BODY 空BODY標記
EVAL_BODY_INCLUDE 帶BODY標記,執行流程進入doAfterBody
EVAL_BODY_BUFFERED 帶BODY標記,執行流程進入setBodyContent
doEndTag()
return value: SKIP_PAGE 忽略標記後剩餘的JSP內容
EVAL_PAGE 繼續執行標記後剩餘的JSP內容
doAfterBody()
return value: SKIP_BODY 結束doAfterBody()方法,流程進入doEndTag()
EVAL_BODY_AGAIN 繼續執行doAfterBody()方法
SimpleTagSupport
較好的練習題:
一、
1、模仿jstl標籤庫開發下欄標籤:
1)<sql:setDataSource>
屬性有:
driver:必須的,可以用運算式
url;必須的,可以用運算式
user:必須的,可以用運算式
password:必須的,可以用運算式
2)<sql:query>
屬性有:
dataSource:必須的,可以用運算式
sql:必須的,可以用運算式
3)<sql:update>
屬性有:
dataSource:必須的,可以用運算式
sql:必須的,可以用運算式
2、開發類似於<c:forEach>的標籤,可以遍曆一個集合對象(可選,如不能完成,可直接利用jstl的標籤來完成)
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.