自定义标签库_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()获得标签体的内容
自定义标签库_tag的更多相关文章
- thinkphp自定义标签库
thinkphp ~ php中 的类, 的成员变量, 本身是没有类型说明的, 那么我怎么知道它的类型呢? 或初始值呢? 通常在类定义中, 如果能给一个初始值的(对于已知简单类型的),最好给一个初始值, ...
- ThinkPHP3.2.3 自定义标签库的使用
ThinkPHP 3.2.3 手册中标签库驱动的地址是: http://www.kancloud.cn/manual/thinkphp/1859 标签库的地址是:http://www.kancloud ...
- JSP自定义标签库
总所周知,JSP自定义标签库,主要是为了去掉JSP页面中的JAVA语句 此处以格式化输出时间戳为指定日期格式为例,简单介绍下JSP自定义标签的过程. 编写标签处理类(可继承自javax.servlet ...
- ThinkPHP - 自定义标签库 - 标签驱动
ThinkPHP 官方文档:http://document.thinkphp.cn/manual_3_2/taglib_driver.html 创建一个类,继承自TagLib类: <?php / ...
- jsp 自定义标签库
自定义标签的作用 *** 自定义标签的主要用于移除jsp页面中java代码 *** JSP页面中使用自定义的标签 使用jsp指令<% @taglib uri="标签库的uri" ...
- [JSP]自定义标签库taglib
自定义标签的步骤 自定义标签的步骤大概有三步: 1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如Tag.TagSupport.BodyTagSupport.Simpl ...
- JavaWeb学习之JSTL自定义标签库的使用、JSTL自定义函数库(7)
一.自定义标签,步骤 * 确定需求 * <my:date /> 输出当前系统的时间 yyyy-MM-dd hh:mm:ss:SSS * 编写Java类 新建包名:com.yxl.tag,新 ...
- JavaWeb学习记录(十九)——jstl自定义标签库之传统标签
一.传统标签 (1)JSP引擎将遇到自定义标签时,首先创建标签处理器类的实例对象,然后按照JSP规范定义的通信规则依次调用它的方法. public void setPageContext(PageCo ...
- 学习笔记_Java_day13_JSTL_自定义标签库(9)
自定义标签 1 自定义标签概述 1.1 自定义标签的步骤 其实我们在JSP页面中使用标签就等于调用某个对象的某个方法一样,例如:<c:if test=””>,这就是在调用对象的方法一样.自 ...
随机推荐
- [mongodb] MMAPv1 Storage Engine
MMAPv1 是mongodb 在3.2以前默认的存储引擎,在3.2 之后默认的存储引擎为WiredTiger,MMAPv1存储引擎基于内存映射文件,它擅长高容量的插入,读取和更新. Journal ...
- vi使用技巧(转载)
http://www.cnblogs.com/xusir/p/3245007.html 这是转载的链接
- jvm-java内存模型与锁优化
java内存模型与锁优化 参考: https://blog.csdn.net/xiaoxiaoyusheng2012/article/details/53143355 https://blog.csd ...
- 403.14-Forbidden Web 服务器被配置为不列出此目录的内容
第二次碰到这个问题了,记录一下 解决方案:1. 运行->cmd 2. cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319 3. aspnet_ ...
- NumPy算数运算
NumPy - 算数运算 用于执行算术运算(如add(),subtract(),multiply()和divide())的输入数组必须具有相同的形状或符合数组广播规则. 示例 import numpy ...
- ZC_03_创建对象
1. 正如 上一篇文章中所见,反射创建 类实例的方式,主要为2类: (1).Class对象.newInstance() 这是使用 默认的无参构造函数 创建对象 (2).Constructor对象.ne ...
- 解析CEPH: 存储引擎实现之一 filestore
Ceph作为一个高可用和强一致性的软件定义存储实现,去使用它非常重要的就是了解其内部的IO路径和存储实现.这篇文章主要介绍在IO路径中最底层的ObjectStore的实现之一FileStore. Ob ...
- cvSmooth函数 和 OpenCV自带的人脸检测
记录cvSmooth函数的用法和 OpenCV自带的人脸检测. (1)cvSmooth函数 void cvSmooth( const CvArr* src, CvArr* dst,int smooth ...
- 2017年浙江工业大学大学生程序设计迎新赛热身赛-J-Forever97与寄信
Forever97与未央是一对笔友,他们经常互相写信.有一天Forever97去邮局寄信,发现邮局的收费方式变成了按字收费,收取的费用为总字数除了其自身以外的最大因子.虽然Forever97是一个有情 ...
- Openstack Mitaka 负载均衡 LoadBalancerv2
最近研究了一下Openstack负载均衡,yum源和源码级别的安装都尝试成功了.网上有很多文章都是LoadBalancerv1,这个已经被放弃了.所以写一下自己是如何使用LoadBalancerv ...