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文件:

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"><tlib-version>1.0</tlib-version><jsp-version>2.0</jsp-version><short-name>my</short-name><!-- 直接显示hello --><tag><name>Hello</name><tag-class>com.huanle.utils.tags.Test</tag-class><body-content>empty</body-content></tag></taglib>

上面代码通过<tag>标签描述一个自定义标签,<body-content>empty</body-content>表示这个标签没有标签体,也就是开始标签和结束标签之间没有内容。

接下就可以在jsp文件中使用这个标签了(记得使用<%@taglib prefix="my" uri="/WEB-INF/custom.tld" %>指令导入标签库):

<%@taglib prefix="my" uri="/WEB-INF/custom.tld" %>
<!DOCTYPE html>
<html>
<head>
<title>标签</title>
</head>
<body><p>没有标签体,直接输出内容的标签</p><my:Hello/>
</body>
</html>

继承SimpleTagSupport定义简单标签

继承SimpleTagSupport,然后实现doTag()方法就可以自定义一个标签。这里有份英文教程,对继承SimpleTagSupport方式讲得非常透彻浅显易懂,链接:jsp自定义标签教程 .pdf

下面是一些例子:

定义标签属性

(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文件里添加这个属性的描述,用<attribute>标签:

   <tag><name>Hello</name><tag-class>com.huanle.utils.tags.Test</tag-class><body-content>empty</body-content><attribute><name>name</name></attribute></tag>

<attribute>标签有多个子标签可以用来定义该属性的限制:

名称用处
name定义属性名
required定义该属性是否是必须的,默认是false
rtexprvalue定义是否允许使用一个运行时表达式的值作为该属性的值,默认为false。比如要支持EL表达式,这个属性应该置为true
type定义属性的值类型,默认是String
fragment声明这个变量是否应该被看做JspFragment.

定义标签体

之前定义的标签标签体一直都是空的,如果要支持标签体:

(1)修改tld文件的<body-content>值为scriptless,表示有标签体,并且标签体不含脚本(指jsp脚本,EL表达式等)

<!-- 获取标签体,输出 --><tag><name>Hello</name><tag-class>com.huanle.utils.tags.Test</tag-class><body-content>scriptless</body-content></tag>

(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));}
}

使用时就可以包含标签体了:

<my:Hello>hello</my: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);...}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python调用adb shell命令_Python之使用adb shell命令启动应用的方法详解

Python之使用adb shell命令启动应用的方法详解一直有一个心愿希望可以用Python做安卓自动化功能测试&#xff0c;在一步步摸索中&#xff0c;之前是用monkeyrunner&#xff0c;但是发现对于控件ID的使用非常具有局限性&#xff0c;尤其是ID的内容不便于区分具有重复性时&#x…

关于NPN和PNP传感器的应用区别(转载)

http://blog.csdn.net/greatwgb/article/details/9120735 PNP与NPN型传感器其实就是利用三极管的饱和和截止&#xff0c;输出两种状态&#xff0c;属于开关型传感器。但输出信号是截然相反的&#xff0c;即高电平和低电平。PNP输出是高电平1&#xff0c;NPN输出的是低电平0。 …

spring security:第一个程序

spring security虽然已经简化了&#xff0c;但配置还是要小心翼翼的。这里运行起第一个spring security程序。 环境&#xff1a; spring 4.2.4spring security 4.0.4 &#xff08;GA&#xff09; 搭建步骤&#xff1a; pom.xml 加入web和config模块&#xff0c;config模块是…

文献引用的标准格式_外语论文文献引用格式—APA Style

APA Style写外语论文时&#xff0c;非常注意引用格式的使用。APA作为常见的论文引用格式之一&#xff0c;常被用于心理学、教育学和社会学科领域。可是你知道APA格式要如何使用&#xff1f;APA格式有哪些要求&#xff1f;下面小编为大家整理一下~什么是APA格式&#xff1f;APA格…

每日一九度之 题目1030:毕业bg

时间限制&#xff1a;1 秒 内存限制&#xff1a;32 兆 特殊判题&#xff1a;否 提交&#xff1a;2046 解决&#xff1a;894 题目描述&#xff1a;每年毕业的季节都会有大量毕业生发起狂欢&#xff0c;好朋友们相约吃散伙饭&#xff0c;网络上称为“bg”。参加不同团体的bg会有不…

spring security:第一个程序解析

上一篇在一个项目里配置了spring security&#xff0c;这里大致说一些这些配置的作用。 pom.xml 文件解析 <!-- spring security --><!-- spring 安全--><dependency><groupId>org.springframework.security</groupId><artifactId>spring…

python发钉钉消息_Python调用钉钉机器人推送消息

1.创建钉钉机器人群机器人是钉钉群的高级扩展功能&#xff0c;群机器人可以将第三方服务的信息聚合到群聊中&#xff0c;实现自动化的信息同步&#xff1b;进入一个钉钉群&#xff0c;点击右上角的“群设置”进入群设置页面&#xff1b;选择群机器人点击进入&#xff0c;在机器…

spring security:基于MongoDB的认证

spring security对基于数据库的认证支持仅限于JDBC&#xff0c;而很多项目并非使用JDBC&#xff0c;比如Nosql数据库很多使用的是 Mongo Java Driver,这样就无法用默认的<jdbc-user-service>进行支持认证。 如果项目不是使用JDBC&#xff0c;没么解决办法就是&#xff1…

pandas 提取某几列_【科学计算工具二】初识Pandas

和Numpy最大的不同&#xff0c;Pandas的数据有对应的index。一、Series数组Series 是带有标签的一维数组&#xff0c;可以保存任何数据类型&#xff08;整数&#xff0c;字符串&#xff0c;浮点数&#xff0c;Python对象等&#xff09;&#xff0c;轴标签统称为索引创建Series数…

maven+springmvc下载excle文件——ie8可用

mavenspringmvc下载excle文件——ie8可用转载于:https://www.cnblogs.com/zhujiabin/p/5866535.html

spring security:自定义认证成功处理器

使用spring认证登录&#xff0c;登录之后&#xff0c;一般还需要进行其他处理&#xff0c;例如&#xff1a;保存登录时间、登录ip到数据库&#xff0c;缓存用户信息到redis数据库等等&#xff0c;这些操作可以通过自定义一个登录成功处理器来处理。 自定义认证成功处理器 只需…

开发物体识别桌、_科研人员开发突破性的技术,允许盲人识别形状和物体

一项令人难以置信的新技术正在让失明人士有能力识别形状和物体&#xff0c;而这些形状和物体都是在他们的大脑上“画出来”的。一篇描述该技术的研究论文刚刚发表在《细胞》杂志上&#xff0c;正如ScienceNews报道的那样&#xff0c;这可能是向盲人提供一种视觉上与周围世界互动…

【第一周】PSP

日期C类别C内容S开始时间E结束时间I间隔(单位:分钟)T净时间(单位:分钟)9月2日编程词频统计7:359:35101109月3日读书构建之法8:009:00555 编程词频统计13:0014:000609月4日读书构建之法8:009:00060 编程四则运算13:0015:0010110总时间&#xff1a;395分钟&#xff0c;约等于6.58…

spring webflow getting start

概述 很多时候&#xff0c;我们写的流程都嵌在一大堆代码中&#xff0c;没有办法直观的管理。而spring webflow可以将流程抽出来&#xff0c;放到一个单独的xml文件中&#xff0c;这样流程就不会埋没在代码里了。 今天要做一个很简单的流程&#xff1a; 商品发布流程 Created…

pythonvim编辑教程_Pycharm学习教程(6) Pycharm作为Vim编辑器使用

Pycharm作为Vim编辑器使用&#xff0c;具体内容如下1、主题如果你是Vim的粉丝&#xff0c;并且不打算使用其他类型的编辑器&#xff0c;那么这篇教程将会比较适合你。这里将会详细介绍如何在Pycharm IdeaVim插件的帮助下下载、安装、使用Vim。至于有关Python编程以及Vim的用法&…

什么是cname a记录

https://support.dnsimple.com/articles/cname-record/ CNAME就是别名记录&#xff0c;就是负责跳转&#xff0c;比如你给某个地址设置了一个cname,那当访问那个cname的时候&#xff0c;就会跳转到那个某个地址 a记录就是一个ip地址所对应的地址。可以理解为a记录就是一个连接器…

Spring上传时报Invalid CSRF Token错误解决方案

概述 使用spring security之后&#xff0c;默认上传文件会报这个错&#xff0c;解决方案有下面两个&#xff1a; 解决方案一&#xff1a; 将 MultipartFilter 放在 springSecurityFilterChain 前面 修改web.xml文件&#xff1a; <!-- 文件上传过滤器&#xff0c;过滤上传…

windows 修改nginx端口号_分享Nginx搭建图片服务器简单实现

第一步&#xff1a;安装vsftpd提供ftp服务https://www.cnblogs.com/lyq159/p/12070791.html第二步&#xff1a;安装Nginx提供http服务1.安装准备&#xff1a;安装Nginx环境a) gcc      安装nginx需要先将官网下载的源码进行编译&#xff0c;编译依赖gcc环境&#xff0c;如…

C#学习笔记-数据的传递(公共变量)以及Dictionary

看的代码越多&#xff0c;写的代码越多&#xff0c;就越是享受这些字符&#xff0c;终于渐渐懂得了那种传闻中的成就感&#xff0c;特别是自己从看不懂然后一步一步学&#xff0c;一个代码一个代码地敲&#xff0c;最后哪怕只是完成了一个小功能&#xff0c;也都是特别自豪的&a…

spring webflow : 上传单个文件实例

准备 如果你项目中使用了spring security的话&#xff0c;参考上一篇文章&#xff0c;使用上篇的第二种方法&#xff0c;并去掉MultipartFilter&#xff08;如果有配置的话&#xff09;&#xff0c;否则得不到文件流程中的变量&#xff08;如用var标签定义的变量&#xff09;&…