Java教程:IterationTag接口使用教程

在自定义标签的开发过程中,有时需要对标签体的内容进行重复处理,这时,可以使用IterationTag接口,它继承自Tag 接口,在Tag接口基础上新增了一个 EVAL_BODY_AGAIN常量和一个 doAfterBody()方法,具体如下。

1. EVAL_BODY_AGAIN常量

EVAL_BODY_AGAIN常量是doAfterBody()方法的返回值,如果doAfterBody()方法返回该常量,JSP容器会把标签体的内容重复执行一次。

2. int doAfterBody()方法

JSP容器在每次执行完标签体后会调用doAfterBody()方法,该方法可以返回常量SKIP_BODY和EVAL_BODY_AGAIN。如果方法返回SKIP_BODY常量,JSP容器回执行代表结束的标签的doEndTag()方法,如果返回EVAL_BODY_AGAIN,则重复执行标签体。

为了让读者更好地学习IterationTag接口,接下来通过一个案例演示如何使用IterationTag接口实现重复执行标然休的功能,具体步骤如下。

Java教程:IterationTag接口使用教程插图1

(1)编写标签处理器类。

建Web工程chapter1,并在工程下编写标签处理器类Iterate.java。由于TagSupport类实现了IterationTag接口,为了简化程序的编写,我们定义的标签处理器类只需继承TagSupport类即可,Iterate.java类的实现代码如下代码所示。

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;    }    //执行一次标签体    public int doStartTag() throws JspException {        return Tag.EVAL_BODY_INCLUDE;    }    //根据属性值对标签体进行执行    public int doAfterBody() throws JspException {        num--;        if (num > 0) {            return EVAL_BODY_AGAIN;        } else {            return SKIP_BODY;       //跳过标签体        }    }}

在上面代码中,成员变量num用于接收标签num属性的值,用来决定标签体的执行次数。由于doStartTag()方法的返回值为EVAL_BODY_INCLUDE,在执行doAfterBody()方法之前,标签体已经执行了一次,因此在doAfterBody()方法中判断if条件之前先将num的值自减一次。

(2)注册标签处理器类。

在mytag.tld文件中增加一个Tag元素,对标签处理器类进行注册,注册信息如下所示。

    iterate    cn.itcast.chante-01.c1assisctaa.Iterate    JSP            num        true    

(3)编写JSP页面iterate.jsp。

在JSP页面中使用标签,将num属性的值设置为5,同时将标签体的内容设置为hello.itcast! 。iterate.jsp页面如上面所示。

<%@page language="java" pageEncoding="GBK"%><%@taglib uri="http://www.itcast.cn" prefix= "itcast"%>            iterate Tag                            hello,itcast!

(4)启动Tomcat服务器,在浏览器地址栏中输入http://localhost:8080/chapter01/iterate.jsp访问iterate.jsp页面,可以发现,在浏览器中标签体内容hello,itcast!显示了5遍。说明编写的自定义标签实现了重复执行标签体的功能。

举报/反馈

原创文章 Java教程:IterationTag接口使用教程,版权所有
如若转载,请注明出处:https://www.itxiaozhan.cn/20227520.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注