自定义标签
开发步骤
1.编写标签处理类
(1)传统方式(JSP1.1):实现javax.servlet.jsp.tagext.Tag接口
- doSatrtTag():标签处理类的核心方法
该方法有以下2个返回值:0/1
int SKIP_BODY=0;标签体不会被执行
int EVAL_BODY_INCLUDE=1;标签体会被执行
(2)简单方式(JSP2.0):实现javax.servlet.jsp.tagext.SimpleTag接口
- doTag():标签执行完毕之后的方法。例如可以让标签在执行完毕后,再执行一遍
int SKIP_PAGE=5;后面的JSP页面内容不被执行
int EVAL_PAGE=6;后面的JSP页面内容继续执行
如果jsp在编译阶段发现了自定义标签<xx:yyy>,就会交给doStartTag()或doTag()
传统方式的核心是有缓冲区,简单方式没有
2.编写标签描述符
编写建议:可以仿照一个其他标签语言(el,jstl)的tld文件
- < body-content >的元素值共有4个
- Tag属性
代码示例:
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/jsee/web-jsptagLibrary_2_0.xsd"
version="2.0">
<tlib-version>1.2</tlib-version>
<uri>标签库的url</uri>
<short-name>zd</short-name><!--表示标签的前缀名字类似于<jsp:forward>中的jsp-->
<tag>
<name>dict</name><!--表示标签的名字 类似于<jsp:forward>中的forward-->
<description>标签库描述</description>
<tag-class>com.zd.control.tag.DitcTag</tag-class> <!--标签所在类 -->
<body-content>empty</body-content>
<!--是否存在标签体,简单标签是填scriptclass,传统标签填JSP-->
<!-- 标签添加参数 -->
<attribute>
<name>id</name><!-- 给select定义一个id(必须) -->
<required>true</required>
<rtexprvalue>false</rtexprvalue><!-- 说明属性不可以是一个运行时表达式(必须是一个常量String) -->
</attribute>
<attribute>
<name>name</name><!-- name映射(不是必须) -->
<required>false</required>
<rtexprvalue>false</rtexprvalue><!-- 说明属性不可以是一个运行时表达式(必须是一个常量String) -->
</attribute>
</tag>
</taglib>
3.导入并使用
myTag.tld(即自定义标签文件)只能导入到WEB-INF或子目录下/WEB-INF/xxx(但是不能放在WEB-INF/lib、WEB-INF/classes里)
引用具体要使用的.tld文件:
<% @taglib url=“每个tld文件的唯一标识符” prefix=""使用tld标签时的前缀 %>
具体的使用:
1、空标签(没有标签体的标签)
(1)<d:foreach></d:foreach>
(2)<d:foreach/>
2、带标签体
<d:foreach>xxx</d:foreach>
3、带属性