EVAL_BODY_INCLUDE:把Body读入存在的输出流中,doStartTag()函数可用
EVAL_PAGE:继续处理页面,doEndTag()函数可用
SKIP_BODY:忽略对Body的处理,doStartTag()和doAfterBody()函数可用
SKIP_PAGE:忽略对余下页面的处理,doEndTag()函数可用
EVAL_BODY_TAG:已经废止,由EVAL_BODY_BUFFERED取代
EVAL_BODY_BUFFERED:申请缓冲区,由setBodyContent()函数得到的BodyContent对象来处理tag的body,如果类实现了BodyTag,那么doStartTag()可用,否则非法
BodyTagSupport类的方法:
编写标签对应的实现类时,需要重载BodyTagSupport类几个方法:doStartTag(), setBodyContent(), doInitBody(), doAfterBody(), doEndTag();
他们执行顺序如下:
doStartTag()→doInitBody()→setBodyContent()→doAfterBody()→doEndTag()
doStartTag()方法可返回EVAL_BODY_INCLUDE或SKIP_BODY,
如果返回EVAL_BODY_INCLUDE则继续执行;
如果返回SKIP_BODY则接下来的doInitBody(),setBodyContent(), doAfterBody()三个方法不会被执行,
而直接执行doEndTag()方法。
setBodyContent()方法用于设置标签体内容,如果在此之前要作一些初始化工作,则在doInitBody()方法中完成。
标签体内容执行完后,会调用doAfterBody()方法,此方法可返回EVAL_BODY_TAG, SKIP_BODY,
EVAL_PAGE或SKIP_PAGE。
如果返回EVAL_BODY_TAG则会再次设置标签体内容,直到返回SKIP_BODY;
如果返回EVAL_PAGE则标签体执行完后会继续执行JSP页面中接下来的部分;
如果返回SKIP_PAGE,则JSP页面的后续内容将不再执行。
标签中静态常量:
EVAL_BODY_INCLUDE:告诉服务器正文的内容,并把这些内容送入输出流
SKIP_BODY:告诉服务器不要处理正文内容
EVAL_PAGE:让服务器继续执行页面
SKIP_PAGE:让服务器不要处理剩余的页面
EVAL_BODY_AGAIN:让服务器继续处理正文内容,只有doAfterBody方法可以返回
EVAL_BODY_BUFFERED:BodyTag接口的字段,在doStartTag()返回
EVAL_BODY_INCLUDE、SKIP_BODY一般由doStartTag()返回,而EVAL_PAPGE、SKIP_PAGE由doEndTag()返回。
分享到:
相关推荐
5. `doEndTag()`:结束标签处理,可以返回`SKIP_PAGE`或`EVAL_PAGE`。 开发自定义标签的过程包括: 1. 创建标签处理程序(Java类):实现上述接口或继承类,并编写相应的方法实现标签功能。 2. 编写`.tld`文件:...
- `doStartTag()`: 返回值可为`BodyTag.SKIP_BODY`(跳过Body并直接调用`doEndTag()`)、`BodyTag.EVAL_BODY_INCLUDE`(包括Body并继续)或`BodyTag.EVAL_BODY_BUFFERED`(缓冲Body内容)。 - `doAfterBody()`: ...
返回`EVAL_PAGE`继续,`SKIP_PAGE`则停止。 6. 最后,`release()`方法被调用,释放任何由标签占用的资源。 开发自定义标签时,可以选择直接实现Tag接口,或者继承`TagSupport`类。以下是一个简单的HelloWorld标签...
在TLD文件中,你需要定义你的标签,包括标签名、类名、标签体类型等属性。例如,对于`bodyTag1`,你应该定义它的名称、类名、标签体类型(通常为`jsp`),以及任何必要的属性(如`countNum`)。 5. **在JSP页面中...
`BodyTagSupport`是JSP API提供的一种用于处理包含内容(body)的标签的支持类,它是`TagSupport`的子类。 1. **doStartTag()**:这是自定义标签生命周期的第一个方法,当遇到标签开始标记时调用。通常在这里进行...
- **结束标签**: 调用`doEndTag()`,返回`EVAL_PAGE`将继续处理页面,返回`SKIP_PAGE`则停止处理。 - **释放资源**: `release()`方法被调用,释放标签占用的资源。 3. **标签支持类** 为了简化开发,通常会从`...
`TagSupport`适用于无标签体的标签,而`BodyTagSupport`则用于包含标签体的标签。 - `setter`方法用于设置标签属性值,例如`doStartTag()`和`doEndTag()`会在标签开始和结束时被调用。 - `doStartTag()`和`...
根据提供的文件信息,本文将详细解释“ForEach_java(cusTag).txt”中涉及的关键知识点,主要包括自定义 JSP 标签库中的 `ForEach` 标签实现及其在 Java Web 应用程序中的应用。 ### 一、ForEach 标签概述 `ForEach...
6. 执行`doEndTag()`方法,返回`EVAL_PAGE`或`SKIP_PAGE`决定是否继续执行JSP页面的剩余部分。 7. 最后,调用`release()`方法释放资源。 开发自定义标签的完整步骤包括: 1. 开发标签类,实现所需的接口或继承基类...
`TagSupport`适用于没有标签体(即标签内部没有内容)的标签,而`BodyTagSupport`用于处理包含标签体的标签。 - `doStartTag()`:当遇到标签开始符时调用,用于初始化标签状态。 - `doEndTag()`:标签结束时调用,...
4. 还有一些其他接口,如`TagSupport`, `BodyTagSupport`等,是`Tag`接口的子接口,提供了默认实现。 **自定义标签的形式**: 自定义标签可以有四种形式: 1. 空标签,如`<hello />` 2. 带有属性的空标签,如`...
而doEndTag()方法返回Tag.EVAL_PAGE表示标签后的页面内容将继续被处理,返回Tag.SKIP_PAGE则表示不处理后续的页面内容。 对于带内容体的标签处理器类,除了doStartTag()和doEndTag()方法,还需要覆盖doAfterBody()...
当你创建一个自定义标签,并且这个标签需要包含JSP页面中的其他内容时,你应该继承`BodyTagSupport`。例如,你可以创建一个“highlight”标签,用于高亮显示其内部的文本。以下是一个简单的实现: ```java import ...
return EVAL_PAGE; } @Override public int doStartTag() throws JspException { List<UserInfo> users = new ArrayList(); if (cateid == 1) { users.add(new UserInfo("张三", 20, "Zhangsan@163.com")); ...
4. **BodyTagSupport类的doAfterBody方法**:在给出的代码示例中,`doAfterBody`方法会连续执行两次,因为每次执行后返回`EVAL_BODY_AGAIN`,直到num达到2,返回`SKIP_BODY`结束循环。因此,"good"会被输出2次。 5....
通过在doStartTag()方法中返回不同的Tag.EVAL_BODY_INCLUDE、Tag.SKIP_BODY或Tag.EVAL_PAGE常量,可以决定是否继续处理标签体,跳过标签体,或是结束整个页面的处理。例如,可以创建一个条件标签,根据某个条件决定...
- 功能:表示结束标签的处理逻辑,在这里返回`EVAL_PAGE`,意味着继续处理当前页面的后续部分。 ### 3. 反射机制的应用 在`doStartTag`方法中,使用了Java反射机制来动态地调用对象的getter方法获取属性值。具体...
TLD文件定义了标签库的行为,包括标签的名称、属性以及功能描述等。 例如,在`myTag.tld`文件中配置迭代标签的信息: ```xml <tlib-version>1.0 <short-name>MyTagLib <uri>...
首先,你需要编写Tag Handler,这个类需要实现Tag、IterationTag或BodyTag接口,通常会继承TagSupport或BodyTagSupport。然后,创建一个Tag Library Descriptor (TLD)文件,用于描述标签的行为、名称、类路径以及...
return EVAL_PAGE; } @Override public void doInitBody() throws JspTagException { // 初始化body内容 } @Override public void setBodyContent(BodyContent bodyContent) { this.bodyContent = body...