自定义标签

一、标签:

标签处理程序是在运行时期调用。必须实现或扩展javax.servlet.jsp.tagext包定义的三个Java接口中的一个

Tag: 标签处理程序和JSP页面的基本协议。定义了所有标签处理程序的基本方法。

IterationTag: 扩展Tag接口,控制对标签体的重复处理
BodyTag: 继承IterationTag接口,对标签体中内容进行处理

 

有标签体的标签必须实现 BodyTag 接口。

<jsptag:table name="list" var="item">body</jsptag:table>

 也可能没有标签体:

<jsptag:page/>

 无标签体的简单标签可以实现 Tag 接口。

 

接口的默认实现:TagSupport和BodyTagSupprt类

TagSupport类为Tag和IterationTag接口的默认实现。支持简单标签和带主体迭代的标签。

BodyTagSupprt类为BodyTag接口的默认实现。支持需要访问和操作标签主体内容的标签。

 

二、标签处理程序:


1、doStartTag():返回EVAL_BODY_INCLUDE或SKIP_BODY

       EVAL_BODY_INCLUDE :输出标签体到当前的输出流  执行标签体(被执行一遍);

       SKIP_BODY:忽略标签体



2、doEndTag(): 返回EVAL_PAGE或SKIP_PAGE

      EVAL_PAGE:执行页面余下部分

      SKIP_PAGE:忽略页面余下部分

 

 

3,doAfterBody(); 返回EVAL_BODY_AFTER或SKIP_BODY;

      EVAL_BODY_AFTER: 跳转到前面重新执行标签体, 对标签体循环处理


      SKIP_BODY:忽略标签体

 

4、release();释放实例;

 

5、setPageContext():设置标签的页面上下文;

 

6、setParent():设置该标签的父标签,没有则设置为NULL;

 

 

三、处理程序生命周期

 

一、实现Tag接口的标签处理程序类的生命周期

 

1、setPageContext():在标签处理器之前被JSP容器调用。调用 setParent()方法

2、设置标签的属性: 有属性,调用setXxx方法设置标签属性,没有属性则跳过。

3、doStartTag()

4、doEndTag():

5、容器缓存标签处理器类实例,重复使用缓存的标签处理类实例

6、release()

 

 

二、实现IterationTag接口的标签处理程序类的生命周期

 

1、setPageContext(),setParent()

2、设置标签的属性

3、doStartTag(),执行标签体(被执行一遍);

4、doAfterBody(),根据返回值决定循环执行标签体还是跳过不执行。

5、doEndTag()

6、从1开始

7、release()

 

三、实现BodyTag接口的标签处理程序类的生命周期

 

1、setPageContext(),setParent()

2、设置标签的属性

3、doStartTag(): 返回EVAL_BODY_BUFFERED或SKIP_BODY_INCLUDE,SKIP_BODY.
   EVAL_BODY_BUFFERED且标签体不为null:
    setBodyContent():
     设置标签处理器类的bodyContent属性,提供了BodyContent对象,缓存标签体静态内容和动态内容。
     调用doInitBody()为标签体执行做准备
      跳转到 执行标签体:
   SKIP_BODY_INCLUDE : 直接跳转到 执行标签体:

   SKIP_BODY : 忽略标签体,直接跳到 5

4、doAfterBody(),根据返回值决定循环执行标签体还是跳过不执行。

5、 doEndTag()

6、从1开始

7、release()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值