java 自定义标签_Java自定义标签用法实例分析
本文实例讲述了Java自定义标签用法。分享给大家供大家参考,具体如下:
简单例子
实现一个标签分为两步:(1)继承SimpleTagSupport或TagSupport实现一个控制器(2)创建一个描述标签的tld文件。下面是一个简单例子:
(1)实现一个标签控制器,向页面输出“hello”:
public class Test extends SimpleTagSupport{
public void doTag() throws IOException{
JspWriter out = getJspContext().getOut();
out.write("hello");
}
}
(2)在WEB-INF文件夹下创建一个custom.tld文件:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
1.0
2.0
my
Hello
com.huanle.utils.tags.Test
empty
上面代码通过标签描述一个自定义标签,empty表示这个标签没有标签体,也就是开始标签和结束标签之间没有内容。
接下就可以在jsp文件中使用这个标签了(记得使用指令导入标签库):
标签
没有标签体,直接输出内容的标签
继承SimpleTagSupport定义简单标签
继承SimpleTagSupport,然后实现doTag()方法就可以自定义一个标签。这里有份英文教程,对继承SimpleTagSupport方式讲得非常透彻浅显易懂,本站下载链接。
下面是一些例子:
定义标签属性
(1)首先在控制器里填加一个属性,并生成setter 方法
public class Test extends SimpleTagSupport{
private String name;
public void doTag() throws IOException{
JspWriter out= getJspContext().getOut();
out.write("hello");
}
public void setName(String name) {
this.name = name;
}
}
(2)在tld文件里添加这个属性的描述,用标签:
Hello
com.huanle.utils.tags.Test
empty
name
标签有多个子标签可以用来定义该属性的限制:
名称
用处
name
定义属性名
required
定义该属性是否是必须的,默认是false
rtexprvalue
定义是否允许使用一个运行时表达式的值作为该属性的值,默认为false。比如要支持EL表达式,这个属性应该置为true
type
定义属性的值类型,默认是String
fragment
声明这个变量是否应该被看做JspFragment.
定义标签体
之前定义的标签标签体一直都是空的,如果要支持标签体:
(1)修改tld文件的值为scriptless,表示有标签体,并且标签体不含脚本(指jsp脚本,EL表达式等)
Hello
com.huanle.utils.tags.Test
scriptless
(2)在标签控制器中获得标签体并输出:
public class Test extends SimpleTagSupport {
private StringWriter sw = new StringWriter();
public void doTag() throws JspException, IOException{
getJspBody().invoke(sw);
getJspContext().getOut().write(sw.toString().trim().substring(0, length));
}
}
使用时就可以包含标签体了:
hello
继承TagSupport实现更复杂的标签(后面更新。。。)
在标签内部使用request
标签属于其实最终会转化成一个Servlet,所有Servlet能做的标签都能做,包括操作request,session等,其中关键就在getJspContext()方法上。代码如下:
public class DispalyErrorMessageTag extends SimpleTagSupport {
public void doTag() throws IOException{
JspWriter out = getJspContext().getOut();
PageContext pageContext = (PageContext)getJspContext();
HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
String value = request.getParameter(param);
...
}
}
希望本文所述对大家java程序设计有所帮助。
java 自定义标签_Java自定义标签用法实例分析相关推荐
- java private 命名_java private关键字用法实例
这篇文章主要介绍了java private关键字用法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 package java04; /* * 问 ...
- java aes pbe,JAVA对称加密算法PBE定义与用法实例分析
本文实例讲述了JAVA对称加密算法PBE定义与用法.分享给大家供大家参考,具体如下: 一 AES.DES和3DES在使用上比较一致 二 PBE算法优点 三 PBE介绍 1.PBE:Password B ...
- java 递归原理_Java中递归原理实例分析
本文实例分析了Java中递归原理.分享给大家供大家参考.具体分析如下: 解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中 ...
- java filter 回调_Java 异步回调机制实例分析
Java 异步回调机制 一.什么是回调 回调,回调.要先有调用,才有调用者和被调用者之间的回调.所以在百度百科中是这样的: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用 ...
- python asyncio回调函数_python回调函数用法实例分析
python回调函数用法实例分析 本文实例讲述了python回调函数用法.分享给大家供大家参考.具体分析如下: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步 ...
- python中max函数用法_Python中max函数用法实例分析
Python中max函数用法实例分析 更新时间:2015年07月17日 15:45:09 作者:优雅先生 这篇文章主要介绍了Python中max函数用法,实例分析了Python中max函数的功能与使用 ...
- php 类常量用法,php类常量用法实例分析
这篇文章主要介绍了php类常量用法,实例分析了php中类常量的概念.特性与相关使用技巧,需要的朋友可以参考下 本文实例讲述了php类常量用法.分享给大家供大家参考.具体如下: '; echo Foo: ...
- python中event的用法_Python编程之event对象的用法实例分析
本文实例讲述了Python编程中event对象的用法.分享给大家供大家参考,具体如下: Python提供了Event对象用于线程间通信,它是由线程设置的信号标志,如果信号标志位为假,则线程等待直到信号 ...
- python中property函数_python 邮件表格Python中property函数用法实例分析
本文实例讲述了Python中property函数用法.分享给大家供大家参考,具体如下: 通常我们在访问和赋值属性的时候,都是在直接和类(实例的)的__dict__打交道,或者跟数据描述符等在打交道.但 ...
- PHP - 回调函数概念与用法实例分析 - 学习/实践
1.应用场景 主要用于理解回调函数的概念, 对比JavaScript中的回调函数, 更加深刻理解回调函数的本质, 以及如何高效使用~~~ 2.学习/操作 1. 文档阅读 https://www.jb5 ...
最新文章
- 如何为Linux设置Docker和Windows子系统:爱情故事。 ?
- 【中级软考】函数参数传递传值与传引用的区别(global关键字,函数内定义全局变量)
- Skywalking-08:OAL原理——如何动态生成Class类
- 原版win7集成usb3.0驱动_windows7的不老传说,十代U安装win7教程
- python运算学习之Numpy ------ 数组操作:连接数组、拆分数组 、广播机制、结构化数组、文件贮存与读写、np.where、数组去重...
- 【转】SpringCloud学习
- maven项目打包成可执行的jar
- Excel实现电子发票管理
- 为什么要学习数据库,数据库有什么作用呢,以及为什么要选mysql
- 如何优化内存?Unity中的内存种类;冯乐乐的总结的优化技术。
- winpe装双系统linux_如何安装linux,winpe下如何安装linux的ISO
- 如何获取a股level2数据接口?
- 【CSDN2012年度博客之星】喜欢本博客的读者,投票赠送《visual C++2010开发权威指南》电子稿--感谢支持 ~(截至到2012年12月30日)
- 【点云数据处理】学习笔记
- 【漏洞修复】SSL/TLS协议信息泄露漏洞(CVE-2016-2183)
- [POI2007]TET-Tetris Attack
- soot基础 -- soot中基本的对象
- 《职来职往》里的经典语录,总有一句震惊到你!
- python基础-闰年判断
- 学习pandas df[]