在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
怎样自己定制标签(Custom Tag) (整理的学习笔记) 步骤1、创建一个Tag handler class(标记处理器类) package javax.servlet.jsp.tagext 开发空Body的标签处理器类----->1)implements Tag 2)extends TagSupport 空Body的标签处理器类需要覆盖方法: doStartTag() 返回值:Tag.SKIP_BODY doEndTag() 返回值: 1)Tag.EVAL_PAGE:让标签下面的内容继续执行 2)Tag.SKIP_PAGE:让标签下面的内容不执行 开发带Body的标签处理器类----->1)implements BodyTag 2)extends BodyTagSupport 带Body的标签处理器类需要覆盖方法 doStartTag() 返回值: BodyTag.SKIP_BODY:执行后直接调用doEndTag()方法 BodyTag.EVAL_BODY_INCLUDE:执行后直接调用doAfterBody()方法 BodyTag.EVAL_BODY_BUFFERED: doEndTag() 返回值: BodyTag.EVAL_PAGE:标签下面的内容继续执行 BodyTag.SKIP_PAGE:标签下面的内容不执行 doAfterBody() 返回值: BodyTag.SKIP_BODY:执行后调用doEngTag()方法 BodyTag.EVAL_BODY_AGAIN:执行后调用doAfterBody()方法 步骤2、创建一个tld文件(tag library descriptor) 一个XML格式的文件,用于对标记进行描述 通常放在WEB-INF目录下 (/WEB-INF/*.tld) abc.tld <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <!-- template test --> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>tagSample</short-name> <uri>/tagSample</uri> <description>A blank tag library template.</description> <tag> <name>welcome</name> <tag-class>tagapp.HelloTag</tag-class> <body-content>empty</body-content> <display-name>my first tag</display-name> <small-icon> </small-icon> <large-icon> </large-icon> <description> </description> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.String</type> </attribute> </tag> </taglib> 步骤3.创建一个JSP文件 <%@taglib uri="[tld_url]" prefix=""%> <%@taglib uri="/WEB-INF/abc.tld" prefix="mike"%> ... <mike:welcome name=""/> uri的值可以是: A、/WEB-INF/mytag.tld -----> uri="/WEB-INF/mytag.tld" B、tld文件中 <uri>/tagSample</uri> ------> uri="/tagSample" C、利用web.xml文件映射tld文件与taglib-uri的值 -----> uri="/abc" <taglib> <taglib-uri>/abc</taglib-uri> <taglib-location>/WEB-INF/mytag.tld</taglib-location> </taglib> 带Body的标签处理器类的方法的注释: doStartTag() return value: SKIP_BODY 空BODY标记 EVAL_BODY_INCLUDE 带BODY标记,执行流程进入doAfterBody EVAL_BODY_BUFFERED 带BODY标记,执行流程进入setBodyContent doEndTag() return value: SKIP_PAGE 忽略标记后剩余的JSP内容 EVAL_PAGE 继续执行标记后剩余的JSP内容 doAfterBody() return value: SKIP_BODY 结束doAfterBody()方法,流程进入doEndTag() EVAL_BODY_AGAIN 继续执行doAfterBody()方法 SimpleTagSupport 较好的练习题: 一、 1、模仿jstl标签库开发下列标签: 1)<sql:setDataSource> 属性有: driver:必须的,可以用表达式 url;必须的,可以用表达式 user:必须的,可以用表达式 password:必须的,可以用表达式 2)<sql:query> 属性有: dataSource:必须的,可以用表达式 sql:必须的,可以用表达式 3)<sql:update> 属性有: dataSource:必须的,可以用表达式 sql:必须的,可以用表达式 2、开发类似于<c:forEach>的标签,可以遍历一个集合对象(可选,如不能完成,可直接利用jstl的标签来完成) |
请发表评论