<select> <checkbox> 分页 <z:page pagebean=""/> <z:select> <c:foreach> 1、标签库的运作离不开tld文件 2、标签库的标签是定义在tld中的tag标签内(助手类) 1. 标签语言特点 <开始标签 属性="属性值">标签体</结束标签> 空标签 <br/><hr/> <开始标签></结束标签> <开始标签/> ui标签 控制标签 数据标签 2. 自定义标签的开发及使用步骤 2.1 创建一个标签助手类(继承BodyTagSupport) 标签属性必须助手类的属性对应、且要提供对应get/set方法 rtexprvalue 2.2 创建标签库描述文件(tld),添加自定义标签的配置 注:tld文件必须保存到WEB-INF目录或其子目录 2.3 在JSP通过taglib指令导入标签库,并通过指定后缀 访问自定义标签 3. 标签生命周期 SKIP_BODY 3.1 实例化标签助手类->doStartTag()------------->doEndTag() //主要用开发简单标签 EVAL_BODY_INCLUDE SKIP_BODY 3.2 实例化标签助手类->doStartTag()------------->doAfterBody---------------->doEndTag()... EVAL_BODY_AGAIN 3.3 ..... SKIP_BODY:跳过主体 EVAL_BODY_INCLUDE:计算标签主体内容并[输出] EVAL_BODY_BUFFERED:计算标签主体内容并[缓存] EVAL_PAGE:计算页面的后续部分 SKIP_PAGE:跳过页面的后续部分 EVAL_BODY_AGAIN:再计算主体一次
package com.hutao; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTagSupport; public class DemoTag extends BodyTagSupport { /** * Demo标签的助手类 */ private static final long serialVersionUID = 3818472937662127600L; private String test; public String getTest() { return test; } public void setTest(String test) { this.test = test; } @Override public int doStartTag() throws JspException { // TODO Auto-generated method stub System.out.println(".........doStartTag........."); return SKIP_BODY; } @Override public int doAfterBody() throws JspException { // TODO Auto-generated method stub System.out.println(".........doAfterBody........."); return super.doAfterBody(); } @Override public int doEndTag() throws JspException { // TODO Auto-generated method stub System.out.println(".........doEndTag........."); return super.doEndTag(); } } 当doStartTag的返回值为SKIP_BODY的时候,doAfterBody方法不执行,也就是标签体里的内容不运行
package com.hutao; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTagSupport; public class DemoTag extends BodyTagSupport { /** * Demo标签的助手类 */ private static final long serialVersionUID = 3818472937662127600L; private String test; public String getTest() { return test; } public void setTest(String test) { this.test = test; } @Override public int doStartTag() throws JspException { // TODO Auto-generated method stub System.out.println(".........doStartTag........."); return EVAL_BODY_INCLUDE; } @Override public int doAfterBody() throws JspException { // TODO Auto-generated method stub System.out.println(".........doAfterBody........."); return EVAL_BODY_AGAIN; } @Override public int doEndTag() throws JspException { // TODO Auto-generated method stub System.out.println(".........doEndTag........."); return super.doEndTag(); } } 当doStartTag的返回是EVAL_BODY_INCLUDE还有doAfterBody的返回值EVAL_BODY_AGAIN
则只运行doAfterBody方法也就是无限循环输出标签体内的值
文章来源: https://blog.csdn.net/weixin_45180770/article/details/92410270