学科分类
目录
Java Web

Iteration Tag接口

在自定义标签的开发过程中,有时需要对标签体的内容进行重复处理,这时,可以使用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接口实现重复执行标签体的功能,具体步骤如下:

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

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

例1 Iterate.java

 1  package cn.itcast.chapter09.classisctag;

 2  import javax.servlet.jsp.JspException;

 3  import javax.servlet.jsp.tagext.*;

 4  public class Iterate extends TagSupport {

 5    //定义变量

 6    private int num;

 7    //提供num属性的setter方法

 8    public void setNum(int num) {

 9      this.num = num;

 10   }

 11   //执行一次标签体

 12   public int doStartTag() throws JspException {

 13     return Tag.EVAL_BODY_INCLUDE;

 14   }

 15   //根据属性值对标签体进行执行

 16   public int doAfterBody() throws JspException {

 17     num--;

 18     if (num > 0) {

 19       return EVAL_BODY_AGAIN;

 20     } else {

 21       return SKIP_BODY;  //跳过标签体

 22     }

 23   }

 24 }

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

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

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

<tag>

  <name>iterate</name>

  <tag-class>cn.itcast.chapter09.classisctag.Iterate</tag-class>

  <body-content>JSP</body-content>

  <attribute>

    <name>num</name>

    <required>true</required>

  </attribute>

</tag>

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

在JSP页面中使用<itcast:iterate num = "" >标签,将num属性的值设置为5,同时将标签体的内容设置为“hello,itcast!”。iterate.jsp页面如例2所示。

例2 iterate.jsp

 1  <%@ page language="java" pageEncoding="GBK"%>

 2  <%@taglib uri="http://www.itcast.cn" prefix="itcast"%>

 3  <html>

 4    <head>

 5    <title>iterate Tag</title>

 6    </head>

 7    <body>

 8      <itcast:iterate num="5">

 9        hello,itcast!<br />

 10     </itcast:iterate>

 11   </body>

 12 </html>

​ (4)启动Tomcat服务器,在浏览器地址栏中输入http://localhost:8080/chapter09/iterate.jsp访问iterate.jsp页面,如图1所示。

图1 运行结果

从运行结果可以发现,在浏览器中标签体内容“hello,itcast!”显示了5遍。说明编写的自定义标签

实现了重复执行标签体的功能。

点击此处
隐藏目录