jsp 定制标签(Custom Tag)
Java  /  管理员 发布于 7年前   209
怎样自己定制标签(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的标签来完成)
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
			Copyright·© 2019 侯体宗版权所有·
			粤ICP备20027696号
			
			
