本文实例讲述了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自定义标签用法实例分析相关推荐

  1. java private 命名_java private关键字用法实例

    这篇文章主要介绍了java private关键字用法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 package java04; /* * 问 ...

  2. java aes pbe,JAVA对称加密算法PBE定义与用法实例分析

    本文实例讲述了JAVA对称加密算法PBE定义与用法.分享给大家供大家参考,具体如下: 一 AES.DES和3DES在使用上比较一致 二 PBE算法优点 三 PBE介绍 1.PBE:Password B ...

  3. java 递归原理_Java中递归原理实例分析

    本文实例分析了Java中递归原理.分享给大家供大家参考.具体分析如下: 解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中 ...

  4. java filter 回调_Java 异步回调机制实例分析

    Java 异步回调机制 一.什么是回调 回调,回调.要先有调用,才有调用者和被调用者之间的回调.所以在百度百科中是这样的: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用 ...

  5. python asyncio回调函数_python回调函数用法实例分析

    python回调函数用法实例分析 本文实例讲述了python回调函数用法.分享给大家供大家参考.具体分析如下: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步 ...

  6. python中max函数用法_Python中max函数用法实例分析

    Python中max函数用法实例分析 更新时间:2015年07月17日 15:45:09 作者:优雅先生 这篇文章主要介绍了Python中max函数用法,实例分析了Python中max函数的功能与使用 ...

  7. php 类常量用法,php类常量用法实例分析

    这篇文章主要介绍了php类常量用法,实例分析了php中类常量的概念.特性与相关使用技巧,需要的朋友可以参考下 本文实例讲述了php类常量用法.分享给大家供大家参考.具体如下: '; echo Foo: ...

  8. python中event的用法_Python编程之event对象的用法实例分析

    本文实例讲述了Python编程中event对象的用法.分享给大家供大家参考,具体如下: Python提供了Event对象用于线程间通信,它是由线程设置的信号标志,如果信号标志位为假,则线程等待直到信号 ...

  9. python中property函数_python 邮件表格Python中property函数用法实例分析

    本文实例讲述了Python中property函数用法.分享给大家供大家参考,具体如下: 通常我们在访问和赋值属性的时候,都是在直接和类(实例的)的__dict__打交道,或者跟数据描述符等在打交道.但 ...

  10. PHP - 回调函数概念与用法实例分析 - 学习/实践

    1.应用场景 主要用于理解回调函数的概念, 对比JavaScript中的回调函数, 更加深刻理解回调函数的本质, 以及如何高效使用~~~ 2.学习/操作 1. 文档阅读 https://www.jb5 ...

最新文章

  1. 如何为Linux设置Docker和Windows子系统:爱情故事。 ?
  2. 【中级软考】函数参数传递传值与传引用的区别(global关键字,函数内定义全局变量)
  3. Skywalking-08:OAL原理——如何动态生成Class类
  4. 原版win7集成usb3.0驱动_windows7的不老传说,十代U安装win7教程
  5. python运算学习之Numpy ------ 数组操作:连接数组、拆分数组 、广播机制、结构化数组、文件贮存与读写、np.where、数组去重...
  6. 【转】SpringCloud学习
  7. maven项目打包成可执行的jar
  8. Excel实现电子发票管理
  9. 为什么要学习数据库,数据库有什么作用呢,以及为什么要选mysql
  10. 如何优化内存?Unity中的内存种类;冯乐乐的总结的优化技术。
  11. winpe装双系统linux_如何安装linux,winpe下如何安装linux的ISO
  12. 如何获取a股level2数据接口?
  13. 【CSDN2012年度博客之星】喜欢本博客的读者,投票赠送《visual C++2010开发权威指南》电子稿--感谢支持 ~(截至到2012年12月30日)
  14. 【点云数据处理】学习笔记
  15. 【漏洞修复】SSL/TLS协议信息泄露漏洞(CVE-2016-2183)
  16. [POI2007]TET-Tetris Attack
  17. soot基础 -- soot中基本的对象
  18. 《职来职往》里的经典语录,总有一句震惊到你!
  19. python基础-闰年判断
  20. 学习pandas df[]

热门文章

  1. 突然集体涨价的背后 共享充电宝未来会走向何方?
  2. 为什么转置512x512矩阵,会比513x513矩阵慢很多?
  3. sakila-dwh-schema文件
  4. 理想中2.5D的网络拓扑图
  5. C杂讲 字符串格式化 组包与解包
  6. VR和AR已从概念转为真正走进人们生活的实际应用
  7. Delphi 下的Base64编码和解码
  8. 选取网页内容后弹出提示框,类似于微博的快捷转发功能。
  9. 服务器温度显示过高,服务器机房温度过高
  10. 行走在崩溃边缘,程序猿“自救”指南!