jsp 定制标签(Custom Tag)
程序员文章站
2024-02-19 19:58:10
怎样自己定制标签(custom tag) (整理的学习笔记) 步骤1、创建一个tag handler class(标记处理器类) package javax.servlet...
怎样自己定制标签(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的标签来完成)
(整理的学习笔记)
步骤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的标签来完成)
上一篇: ASP.Net页面生成饼图实例