教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

IterationTag接口使用教程

更新時(shí)間:2021年11月16日15時(shí)16分 來源:傳智教育 瀏覽次數(shù):

在自定義標(biāo)簽的開發(fā)過程中,有時(shí)需要對標(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容器會把標(biāo)簽體的內(nèi)容重復(fù)執(zhí)行一次。


2. int doAfterBody()方法

JSP容器在每次執(zhí)行完標(biāo)簽體后會調(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接口,接下來通過一個(gè)案例演示如何使用IterationTag接口實(shí)現(xiàn)重復(fù)執(zhí)行標(biāo)然休的功能,具體步驟如下。


(1)編寫標(biāo)簽處理器類。

建Web工程chapter1,并在工程下編寫標(biāo)簽處理器類Iterate.java。由于TagSupport類實(shí)現(xiàn)了IterationTag接口,為了簡化程序的編寫,我們定義的標(biāo)簽處理器類只需繼承TagSupport類即可,Iterate.java類的實(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ù)屬性值對標(biāo)簽體進(jìn)行執(zhí)行
    public int doAfterBody() throws JspException {
        num--;
        if (num > 0) {
            return EVAL_BODY_AGAIN;
        } else {
            return SKIP_BODY;       //跳過標(biāo)簽體
        }
    }
}

在上面代碼中,成員變量num用于接收標(biāo)簽num屬性的值,用來決定標(biāo)簽體的執(zhí)行次數(shù)。由于doStartTag()方法的返回值為EVAL_BODY_INCLUDE,在執(zhí)行doAfterBody()方法之前,標(biāo)簽體已經(jīng)執(zhí)行了一次,因此在doAfterBody()方法中判斷if條件之前先將num的值自減一次。


(2)注冊標(biāo)簽處理器類。

在mytag.tld文件中增加一個(gè)Tag元素,對標(biāo)簽處理器類進(jìn)行注冊,注冊信息如下所示。

<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)編寫JSP頁面iterate.jsp。

在JSP頁面中使用標(biāo)簽,將num屬性的值設(shè)置為5,同時(shí)將標(biāo)簽體的內(nèi)容設(shè)置為“hello.itcast!” 。iterate.jsp頁面如上面所示。

<%@page language="java" pageEncoding="GBK"%>
<%@taglib uri="http://metathetuscanyresort.com" prefix= "itcast"%>
<html>
    <head>
        <title>iterate Tag</title>
    </head>
    <body>
        <itcast:iterate num="5">
            hello,itcast!<br/>
        </itcast:iterate>
    </body>
</html>

(4)啟動Tomcat服務(wù)器,在瀏覽器地址欄中輸入“http://localhost:8080/chapter01/iterate.jsp”訪問iterate.jsp頁面,可以發(fā)現(xiàn),在瀏覽器中標(biāo)簽體內(nèi)容“hello,itcast!”顯示了5遍。說明編寫的自定義標(biāo)簽實(shí)現(xiàn)了重復(fù)執(zhí)行標(biāo)簽體的功能。



猜你喜歡

接口和抽象類有什么區(qū)別?

ApplicationContext接口實(shí)例

Java中怎樣定義和聲明接口?

傳智教育Java培訓(xùn)高手班課程

0 分享到:
和我們在線交談!