在自定義標(biāo)簽的開(kāi)發(fā)過(guò)程中,有時(shí)需要對(duì)標(biāo)簽體的內(nèi)容進(jìn)行重復(fù)處理,這時(shí),可以使用IterationTag接口,它繼承自Tag 接口,在Tag接口基礎(chǔ)上新增了一個(gè) EVAL_BODY_AGAIN常量和一個(gè) doAfterBody()方法,具體如下 。
1. EVAL_BODY_AGAIN常量
EVAL_BODY_AGAIN常量是doAfterBody()方法的返回值,如果doAfterBody()方法返回該常量,JSP容器會(huì)把標(biāo)簽體的內(nèi)容重復(fù)執(zhí)行一次 。
2. int doAfterBody()方法
JSP容器在每次執(zhí)行完標(biāo)簽體后會(huì)調(diào)用doAfterBody()方法,該方法可以返回常量SKIP_BODY和EVAL_BODY_AGAIN 。如果方法返回SKIP_BODY常量,JSP容器回執(zhí)行代表結(jié)束的標(biāo)簽的doEndTag()方法,如果返回EVAL_BODY_AGAIN,則重復(fù)執(zhí)行標(biāo)簽體 。
為了讓讀者更好地學(xué)習(xí)IterationTag接口,接下來(lái)通過(guò)一個(gè)案例演示如何使用IterationTag接口實(shí)現(xiàn)重復(fù)執(zhí)行標(biāo)然休的功能,具體步驟如下 。
(1)編寫(xiě)標(biāo)簽處理器類(lèi) 。
建Web工程chapter1,并在工程下編寫(xiě)標(biāo)簽處理器類(lèi)Iterate.java 。由于TagSupport類(lèi)實(shí)現(xiàn)了IterationTag接口,為了簡(jiǎn)化程序的編寫(xiě),我們定義的標(biāo)簽處理器類(lèi)只需繼承TagSupport類(lèi)即可,Iterate.java類(lèi)的實(shí)現(xiàn)代碼如下代碼所示 。
package cn.itcast.chapter01.classisctag;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.*;public class Iterate extends TagSupport {//定義變量private int num;//提供num屬性的setter方法public void setNum(int num) {this.num = num;}//執(zhí)行一次標(biāo)簽體public int doStartTag() throws JspException {return Tag.EVAL_BODY_INCLUDE;}//根據(jù)屬性值對(duì)標(biāo)簽體進(jìn)行執(zhí)行public int doAfterBody() throws JspException {num--;if (num > 0) {return EVAL_BODY_AGAIN;} else {return SKIP_BODY;//跳過(guò)標(biāo)簽體}}}在上面代碼中,成員變量num用于接收標(biāo)簽num屬性的值,用來(lái)決定標(biāo)簽體的執(zhí)行次數(shù) 。由于doStartTag()方法的返回值為EVAL_BODY_INCLUDE,在執(zhí)行doAfterBody()方法之前,標(biāo)簽體已經(jīng)執(zhí)行了一次,因此在doAfterBody()方法中判斷if條件之前先將num的值自減一次 。
(2)注冊(cè)標(biāo)簽處理器類(lèi) 。
在mytag.tld文件中增加一個(gè)Tag元素,對(duì)標(biāo)簽處理器類(lèi)進(jìn)行注冊(cè),注冊(cè)信息如下所示 。
<tag><name>iterate</name><tag-class>cn.itcast.chante-01.c1assisctaa.Iterate</tag-class><body-content>JSP</body-content><attribute><name>num</name><required>true</required></attribute></tag>(3)編寫(xiě)JSP頁(yè)面iterate.jsp 。
在JSP頁(yè)面中使用標(biāo)簽,將num屬性的值設(shè)置為5,同時(shí)將標(biāo)簽體的內(nèi)容設(shè)置為“hello.itcast!”。iterate.jsp頁(yè)面如上面所示 。
<%@page language="java" pageEncoding="GBK"%><%@taglib uri="http://www.itcast.cn" prefix= "itcast"%><html><head><title>iterate Tag</title></head><body><itcast:iterate num="5">hello,itcast!<br/></itcast:iterate></body></html>【java調(diào)用接口的方法流程 常用接口調(diào)用方式】(4)啟動(dòng)Tomcat服務(wù)器,在瀏覽器地址欄中輸入“
http://localhost:8080/chapter01/iterate.jsp”訪問(wèn)iterate.jsp頁(yè)面,可以發(fā)現(xiàn),在瀏覽器中標(biāo)簽體內(nèi)容“hello,itcast!”顯示了5遍 。說(shuō)明編寫(xiě)的自定義標(biāo)簽實(shí)現(xiàn)了重復(fù)執(zhí)行標(biāo)簽體的功能 。
推薦閱讀
- 工資管理系統(tǒng)開(kāi)發(fā)的目的 java員工工資管理系統(tǒng)源代碼
- 關(guān)鍵字排名查詢(xún)接口 免費(fèi)大數(shù)據(jù)查詢(xún)平臺(tái)推薦
- java編程軟件有哪些 常用java編程軟件工具
- 空調(diào)用了幾年后一定要加氟嗎
- aux接口是什么 aux接口是什么意思可以連接電腦嗎
- md5工具使用方法 安卓md5校驗(yàn)工具apk
- js課程設(shè)計(jì)做什么 javascript程序設(shè)計(jì)基礎(chǔ)教程
- 臺(tái)式機(jī)硬盤(pán)電源接口圖解 硬盤(pán)電源接口接法圖解
- qgis二次開(kāi)發(fā)環(huán)境搭建 qgis二次開(kāi)發(fā)接口文檔
- 簡(jiǎn)述程序設(shè)計(jì)方法的基本思想 程序設(shè)計(jì)方法學(xué)主要學(xué)什么
