自定义标签库_tag
1)最简单的标签库
1,继承Tag接口,重写doEndTag()方法,返回类型不同后面流程不一样
想要jsp的内容必须重写了setPageContent()方法
再JspWriter out = pageContext.getOut();
package myTag; import java.io.IOException;
import java.util.ResourceBundle; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag; public class Copyright implements Tag {
private PageContext pageContext;
private Tag parent; @Override
public int doEndTag() throws JspException {
// TODO Auto-generated method stub
JspWriter out = pageContext.getOut();
try {
out.println("<div align=center style='line-height:22px;"
+ "font-size:12px;'>");
out.println(ResourceBundle.getBundle("copyright").getString(
"copyright"));
out.println("</div>");
} catch (IOException e) {
throw new JspException(e);
} return EVAL_PAGE;
} @Override
public int doStartTag() throws JspException {
// TODO Auto-generated method stub
return SKIP_BODY;
} @Override
public Tag getParent() {
// TODO Auto-generated method stub
return this.parent;
} @Override
public void release() {
// TODO Auto-generated method stub } @Override
public void setPageContext(PageContext pc) {
// TODO Auto-generated method stub
this.pageContext = pc;
} @Override
public void setParent(Tag t) {
// TODO Auto-generated method stub
this.parent = t;
}
}
2,在WEB-INF/目录下创建tld文件(new/other创建
bodycontent有三个值,empty表示不可以有标签体,jsp表示可以有标签体,tagdependent可以有但不会执行
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>taglib</short-name>
<tag>
<name>copyright</name>
<tagclass>myTag.Copyright</tagclass>
<bodycontent>JSP</bodycontent>
</tag>
</taglib>
3,由于我用了资源文件
ResourceBundle.getBundle("copyright").getString("copyright")
所以src文件下一定要有这个文件的copyright属性
4,在jsp中首先声明,<%@ taglib uri="WEB-INF/xxx.tld" prefix="taglib">
下面就可以<taglib:copyright/>
2)带属性的第标签
TagSupport类实现了Tag接口,根据需要重写你的doStartTag或者doEndTag方法就好了
在类里面定义了这个private属性和setter方法
在tld文件也要去添加修改<attribute>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<required>表示是否必需的
<rtexprvalue>表明是否允许EL表达式或者<%= %>
当有多个参数的时候照样子添加private属性和setter方法
3)带标签体的标签
这时候我们可以使用BodyTagSupport来获得更加丰富的控制,如doInitBody()和doAfterBody()方法
不过他们在进行doStartTag或者doEndTag的方法的时候都会返回常量
SKIP_BODY=0//不跑标签体
EVAL_BODY_INCLUDE=1//跑标签体
SKIP_PAGE=5//强行结束
EVAL_PAGE=6//正常结束
使用this.getBodyContent().getString()获得标签体的内容
最新文章
- JAVA 1.9 面向对象之封装
- 如何布局包含Image和Title的UIButton
- 前端 初识angularJS的基本概念
- 【C语言学习笔记】存储类、链接和内存管理
- linux 的终端字体色和背景色的修改方法(三)
- MVC路由调试工具RouteDebug
- TransactionScope
- NFinal 揭秘之控制器
- Oracle EBS-SQL (BOM-3):检查期间新增Bom数量.sql
- 基于ASIO的协程与网络编程
- JQuery模拟实现天猫购物车动画效果
- Android隐藏软键盘
- 关于Devexpress15.2中GridControl控件选择字段ColumnEdit下拉时间设置
- linux系统 initrd.img中init启动脚本分析
- listview下拉刷新上拉加载扩展(一)
- 使用xshell链接虚拟机的方法
- 【BZOJ4000】[TJOI2015]棋盘(矩阵快速幂,动态规划)
- oracle 中update多个字段
- pwnable.kr-bof-witeup
- JPA实体关系映射:@ManyToMany多对多关系、@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析
热门文章
- [HAOI2007]反素数ant
- CA认证_demo
- [POI2013]BAJ-Bytecomputer
- 【bzoj3170】[Tjoi2013]松鼠聚会(数学题)
- spring集成spring mvc 和hibernate详解
- 初入Spring-boot(二)
- C++ dll的隐式与显式调用
- HTTP Status 500 - java.lang.NoClassDefFoundError: JspTagException
- 用Java编程计算兔子生兔子的问题
- oracle数据库插入优化