`
jzinfo
  • 浏览: 118168 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

读源码学jsp自定义标签 (2) IteataionTag接口

阅读更多

IterationTag接口继承了Tag接口,增加了一个方法和一个静态常量分别是:

 

//javax.servlet.jsp.tag
public interface IterationTag extends Tag 
{
    public final static int EVAL_BODY_AGAIN = 2;  //作为doAfterBody()的返回值,表示重复执行标签体内容
    
    
     /*当容器执行标签体内容后,遇见结束标签前执行,根据返回值来确定流程
     * 可选值:EVAL_BODY_AGAIN: 重复执行标签体
     * SKIP_BODY:不再执行标签体
     */
    int doAfterBody() throws JspException;
}

 

由此,当前接口中可供访问的就有5个静态的常量了。由此可见,IterationTag接口增加了重复执行标签体内容的功能,仅此而已哦.
根据tag对象的生命周期图,很容易知道该方法执行的时机和相关流程。在此不做描述。
类TagSupport实现了IerationTag接口,自己写的标签可以直接继承该类。
查询该类的源码:

 

package javax.servlet.jsp.tagext;

import java.io.Serializable;
import java.util.Enumeration;
import java.util.Hashtable;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;

public class TagSupport implements IterationTag, Serializable {
 
    protected String id;
    protected PageContext pageContext;
    private   Tag  parent;
    private   Hashtable<String, Object> values;


    public static final Tag findAncestorWithClass(Tag from, Class klass)
    {
       boolean isInterface = false;
        if (from == null ||klass == null ||(!Tag.class.isAssignableFrom(klass) &&!(isInterface = klass.isInterface()))) 
            { return null;}
       for (;;) 
       {
         Tag tag = from.getParent();
           if (tag == null)
           { return null;}

          if ((isInterface && klass.isInstance(tag)) || klass.isAssignableFrom(tag.getClass()))
            return tag;
          else
             from = tag;
       }
    }

    //空的构造方法
    public TagSupport() { }

    //默认是返回 跳过标签体,子类需重写该方法
    public int doStartTag() throws JspException {
        return SKIP_BODY;
    }
    
    //默认是返回 执行标签后的JSP代码
    public int doEndTag() throws JspException {
       return EVAL_PAGE;
    }
    
    //默认是返回 不重复执行标签体
    public int doAfterBody() throws JspException {
       return SKIP_BODY;
    }

    //释放标签对象
    public void release() {
   parent = null; //父标签为空
   id = null;
   if( values != null ) 
   {
     values.clear();
   }
   values = null;
    }

   
    //设置父标签
    public void setParent(Tag t) {
       parent = t;
    }

    //返回父标签对象或者null
    public Tag getParent() {
      return parent;
    }

    
    public void setId(String id) {
      this.id = id;
    }
    
    public String getId() {
      return id;
    }

    //设置当前页面上下文
    public void setPageContext(PageContext pageContext) {
       this.pageContext = pageContext;
    }

    

    public void setValue(String k, Object o) {
       if (values == null) 
       {
           values = new Hashtable<String, Object>();
       }       
       values.put(k, o);
    }


    public Object getValue(String k) {
      if (values == null){
          return null;
       } 
       else {
          return values.get(k);
      }
    }


    public void removeValue(String k) {
      if (values != null) {
         values.remove(k);
       }
    }


    public Enumeration<String> getValues() {
       if (values == null) {
          return null;
       }
       return values.keys();
    }

}

 

分享到:
评论

相关推荐

    JSP自定义标签示例源码

    一个自定义标签通常对应一个Java类,这个类需要实现javax.servlet.jsp.tagext.Tag接口或者其子接口,如SimpleTag接口。Tag接口定义了开始处理(doStartTag)和结束处理(doEndTag)方法,这些方法会在标签的生命周期...

    JSP自定义标签源码

    - **接口**:自定义标签通常实现`javax.servlet.jsp.tagext.Tag`接口或者其子接口`javax.servlet.jsp.tagext.SimpleTag`。`Tag`接口用于简单的标签,而`SimpleTag`接口则适用于那些没有开始和结束标签的简单标签。 ...

    JSP自定义标签之日期显示

    2. 编写标签处理类:创建`DisplayDateTag.java`,实现`javax.servlet.jsp.tagext.TagSupport`接口。在这个类中,我们需要处理`doStartTag()`方法,根据传入的日期和格式进行转换: ```java public class ...

    JSP自定义标签-源码.rar

    2. **标签处理程序(Tag Handler)**:与自定义标签对应的Java类,实现了`javax.servlet.jsp.tagext.Tag`接口或其子接口。当JSP引擎遇到自定义标签时,会实例化这个类并调用相应的方法。 3. **标签文件(Tag File)...

    JSP自定义标签的开发及使用

    2. **标签处理类(Tag Handler Class)**:这是Java类,实现了`javax.servlet.jsp.tagext.Tag`接口或其子接口,如`SimpleTag`。这个类包含了自定义标签的逻辑实现。在`Demo1_JspTag`中,可能会有一个名为`...

    jsp自定义标签库

    在JavaServer Pages (JSP) 技术中,自定义标签库(Custom Tag Libraries)是一种强大的特性,允许开发者创建可重用的、封装复杂功能的标签,使得JSP页面更加简洁易读。这篇内容将深入探讨JSP自定义标签库的原理、...

    JSP自定义标签-html在线编辑器

    1. 定义标签处理器类:这个类实现了`javax.servlet.jsp.tagext.Tag`或`javax.servlet.jsp.tagext.SimpleTag`接口,处理标签的生命周期方法,如doStartTag()和doEndTag()。 2. 创建TLD(Tag Library Descriptor)文件...

    JSP自定义标签开发入门

    2. **标签处理类(Tag Handler Class)**:这是实际执行标签逻辑的Java类,它实现了`javax.servlet.jsp.tagext.Tag`接口或其子接口。 3. **标签库(Tag Library)**:包含了一系列的TLD文件和对应的处理类,通过JSP...

    jsp自定义标签实例

    博文链接:https://di201yao.iteye.com/blog/187584

    一个简单的JSP自定义标签

    自定义标签是JSP中的一个重要特性,它允许我们创建自己的标签库,以更直观、易读的方式来表达业务逻辑或复杂的功能。这些标签可以像HTML标签一样使用,但其行为由Java代码控制,从而提高了代码的封装性和可维护性。 ...

    jsp 自定义标签

    **JSP自定义标签**是JavaServer Pages(JSP)技术中的一个重要特性,它允许开发者扩展JSP语言,创建自己的可重用组件。通过自定义标签,开发人员可以编写更符合HTML语法、易于理解和维护的代码,同时隐藏复杂的Java...

    一个用于分页的自定义标签

    2. **标签处理类**:这个类实现了`javax.servlet.jsp.tagext.TagSupport`或`javax.servlet.jsp.tagext.SimpleTagSupport`接口,负责处理标签的逻辑。例如,它会根据传入的参数计算分页链接,生成HTML代码,并插入到...

    Struts2自定义标签

    自定义标签是Struts2框架中的一个重要特性,它允许开发者创建自己的标签库,以更直观、易读的方式在JSP页面中处理业务逻辑。下面将详细介绍Struts2自定义标签的相关知识点。 首先,理解自定义标签的作用。在传统的...

    JSP自定义标签

    为了更好地理解和使用JSP自定义标签,你需要熟悉JSP和Servlet API,尤其是`javax.servlet.jsp.tagext`包下的相关接口。此外,现代IDE,如Eclipse和IntelliJ IDEA,提供了强大的JSP和TLD文件编辑支持,可以帮助你轻松...

    易语言源码易语言GDI自定义线帽源码.rar

    易语言源码易语言GDI自定义线帽源码.rar 易语言源码易语言GDI自定义线帽源码.rar 易语言源码易语言GDI自定义线帽源码.rar 易语言源码易语言GDI自定义线帽源码.rar 易语言源码易语言GDI自定义线帽源码.rar ...

    jsp自定义标签+jpa+hibernate+struts2实现的分页

    本项目结合了JSP自定义标签、JPA(Java Persistence API)、Hibernate ORM框架以及Struts2框架,实现了高效且灵活的分页功能。下面我们将详细探讨这些技术及其在分页中的应用。 首先,JSP自定义标签(Custom Tags)...

    自定义标签

    - 编写Tag Handler类:实现`javax.servlet.jsp.tagext.Tag`接口或其子接口,如`SimpleTag`或`TagSupport`,根据TLD文件中定义的属性,处理标签逻辑。 - 在JSP页面中引入标签库:通过`&lt;jsp:taglib&gt;`指令引入TLD文件...

    易语言源码易语言自定义打印源码.rar

    在这个“易语言源码易语言自定义打印源码.rar”压缩包中,包含的是一份使用易语言编写的自定义打印功能的源代码。这份源代码对于学习易语言的开发者来说,是非常有价值的参考资料,它可以帮助我们理解和掌握如何在...

    自定义JSP标签

    2. **编写标签处理类**:在Java源代码中创建一个类,实现`javax.servlet.jsp.tagext.TagSupport`或`javax.servlet.jsp.tagext.SimpleTagSupport`接口。这个类负责处理标签的生命周期方法,如`doStartTag()`、`...

    自定义tld标签库源码加视频

    【自定义TLD标签库源码加视频】这个主题涵盖了Java服务器端开发中的一个重要概念——自定义标签库(Tag Library)及其源代码分析。在Java Web应用开发中,TLD(Tag Library Descriptor)文件用于定义自定义JSP标签,...

Global site tag (gtag.js) - Google Analytics