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接口实现重复执行标然休的功能,具体步骤如下。

(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元素,对标签处理器类进行注册,注册信息如下所示。

<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页面中使用标签,将num属性的值设置为5,同时将标签体的内容设置为“hello.itcast!” 。iterate.jsp页面如上面所示。

<%@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>

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

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/262954.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
黑马程序员黑马程序员订阅用户
上一篇 2023年5月13日 12:47
下一篇 2023年5月13日 12:47

相关推荐

  • java转换流有什么用?

    在程序开发中,有时会遇到字节流和字符流之间需要进行转换的可能。在java.io包中提供了两个类可以将字节流转换为字符流,它们分别是InputStreamReader和OutputStreamWriter。OutputStreamWriter是Writer的子类,能…

    2023年5月8日
    02
  • 程序员在写一种很新的代码,笑不活了(附源码)

    嗨,黑马粉丝,程序员在你的印象中,是什么样的人呢?高冷?高薪?高智商?今天播妞不说他们这些广为人知的特征,而要说另外一种特质——幽默。程序员常年和电脑打交道,难免让人误以为他们不善言辞,自然也和幽默联…

    2023年5月6日 编程分享
    015
  • 产品经理如何画产品架构图?

    来一个产品经理的经典工作场景:老板:公司计划做一个内容电商产品,你先给个初步方案,大家一起讨论一下。产品经理:好嘞。这个初步方案是什么?在产品工作中,这种初步方案的形式会有很多,可以是一份竞品分析报…

    2023年5月16日
    011
  • 如何使用idea创建纯净版web工程?

    一、前言:idea给我们提供了非常方便的创建web工程的方式,甚多小伙伴喜欢使用骨架来创建,但是创建出来的项目经常很有很多自动生成的、但是我们却不需要的内容,看起来很烦,接下来给大家分享一下如何用idea创建一…

    2023年5月10日 编程分享
    023
  • 用vue构建用户界面有哪些好处?

    前端开发者最主要的工作,就是为网站的使用者(又称为:网站的用户)构建出美观、舒适、好用的网页。vue的出现,逐渐替代了传统的jQuery + 模板引擎构建页面方式,逐渐成为在构建用户界面方面的主流开发框架。下面就…

    2023年5月13日
    00
  • spring框架怎么实现依赖注入?

    依赖注入的作用就是在使用Spring框架创建对象时,动态的将其所依赖的对象注入到Bean组件中,其实现方式通常有两种,一种是属性setter方法注入,另一种是构造方法注入。具体介绍如下:● 属性setter方法注入:指IoC容…

    2023年5月15日
    015
  • 常见的数据通信方式有哪些?

    数据通信方式指通信双方在信号发送、传输和接收这3个环节对信号的处理方式,下面将对不同的信号处理方式进行讲解。1. 单工、半双工与全双工通信按信道上信号的传输方向与时间的关系,通信方式可分为单工通信、半双…

    2023年5月8日 编程分享
    05
  • VMware是什么?VMware虚拟机最新安装教程

    VMware Workstation是一款虚拟机软件,允许用户将Linux、Windows等多个操作系统作为虚拟机在单台PC上运行;用户可以在虚拟机上重现服务器、桌面和平板电脑环境,无需重新启动即可跨不同操作系统同时运行应用。通过对…

    2023年5月24日 编程分享
    03

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息