自定义tag标签的方法
JSP1.0中可以通过继承TagSupport或者BodyTagSupport来实现自定义的tag处理方法。
JSP2.0中也支持另外一种更为简单的自定tag的方法,那就是直接讲JSP代码保存成*.tag或者*.tagx的标签定义文件。tag和tagx文件不仅支持经典jsp代码,各种标签模版代码,还支持xml样式的jsp指令代码。
按照约定,tag和tagx文件需要放置在WEB-INF/tags目录下。
下面是一些简单的示例:
1.简单地显示时间time.tag
- <%@ tag import="java.util.*" import="java.text.*" %>
- <%
- DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);
- Date d = new Date(System.currentTimeMillis());
- out.println(df.format(d));
- %>
- <%@ taglib prefix="util" tagdir="/WEB-INF/tags" %>
- <html>
- <head>
- </head>
- <body>
- Today is <util:time/>.
- </body>
- </html>
2.复制字符串多少遍repeater.tag
- <%@ attribute name="count" type="java.lang.Integer" required="true" %>
- <%@ attribute name="value" type="java.lang.String" required="true" %>
- <%!
- private String repeater(Integer count, String s) {
- int n = count.intValue();
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < n; i++) {
- sb.append(s);
- }
- return sb.toString();
- }
- %>
- <%
- out.println(repeater(count, value));
- %>
- <%@ taglib prefix="util" tagdir="/WEB-INF/tags" %>
- <html>
- <head>
- </head>
- <body>
- Let's get some sleep! <util:repeater count='${3 * 10}' value='zzz'/>
- </body>
- </html>
3.查找省份lookup.tag
- <%@ tag import="java.util.*" %>
- <%@ attribute name="cityName" required="true" %>
- <%@ variable name-given="province" %>
- <%@ variable name-given="population" variable-class="java.lang.Integer" %>
- <%
- if ("Toronto".equals(cityName)) {
- jspContext.setAttribute("province", "Ontario");
- jspContext.setAttribute("population", new Integer(2553400));
- }
- else if ("Montreal".equals(cityName)) {
- jspContext.setAttribute("province", "Quebec");
- jspContext.setAttribute("population", new Integer(2195800));
- }
- else {
- jspContext.setAttribute("province", "Unknown");
- jspContext.setAttribute("population", new Integer(-1));
- }
- %>
- <jsp:doBody/>
- <%@ taglib prefix="util" tagdir="/WEB-INF/tags" %>
- <html>
- <head>
- </head>
- <body>
- <% pageContext.setAttribute("cityName", "Montreal"); %>
- <util:lookup cityName="${cityName}">
- ${cityName}'s province is ${province}.
- ${cityName}'s population is approximately ${population / 1000000} million.
- </util:lookup>
- </body>
- </html>
上面的都是使用的经典jsp代码,下面将第3个示例使用其他代码实现:
*使用标签:
- <%@ tag import="java.util.*" %>
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- <%@ attribute name="cityName" required="true" %>
- <%@ variable name-given="province" %>
- <%@ variable name-given="population" %>
- <c:choose>
- <c:when test="cityName eq 'Toronto'>
- <c:set var="province" value="Ontario"/>
- <c:set var="population" value="2553400"/>
- </c:when>
- <c:when test="cityName eq 'Montreal'>
- <c:set var="province" value="Quebec"/>
- <c:set var="population" value="2195800"/>
- </c:when>
- <c:otherwise>
- <c:set var="province" value="Unknown"/>
- <c:set var="population" value="-1"/>
- </c:otherwise>
- </c:choose>
- %>
- <jsp:doBody/>
- <%@ taglib prefix="util" tagdir="/WEB-INF/tags" %>
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- <html>
- <head>
- </head>
- <body>
- <c:set var="cityName" value="Montreal"/>
- <util:lookup cityName="${cityName}">
- ${cityName}'s province is ${province}.
- ${cityName}'s population is approximately ${population / 1000000} million.
- </util:lookup>
- </body>
- </html>
*使用jsp指令,通常这种方式生成xml格式的文件
- <?xml version='1.0'?>
- <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page">
- <jsp:directive.tag import="java.util.*"/>
- <jsp:directive.taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"/>
- <jsp:directive.attribute name="cityName" required="true"/>
- <jsp:directive.variable name-given="province"/>
- <jsp:directive.variable name-given="population"/>
- <c:choose>
- <c:when test="cityName eq 'Toronto'>
- <c:set var="province" value="Ontario"/>
- <c:set var="population" value="2553400"/>
- </c:when>
- <c:when test="cityName eq 'Montreal'>
- <c:set var="province" value="Quebec"/>
- <c:set var="population" value="2195800"/>
- </c:when>
- <c:otherwise>
- <c:set var="province" value="Unknown"/>
- <c:set var="population" value="-1"/>
- </c:otherwise>
- </c:choose>
- </jsp:root>
- <?xml version='1.0'?>
- <jsp:root version='2.0'
- xmlns:jsp="http://java.sun.com/JSP/Page"
- xmlns:util="urn:jsptagdir:/WEB-INF/tags"
- xmlns:c="http://java.sun.com/jsp/jstl/core">
- <jsp:directive.page contentType="text/html"/>
- <html>
- <head>
- </head>
- <body>
- <c:set var="cityName" value="Montreal"/>
- <util:lookup cityName="${cityName}">
- ${cityName}'s province is ${province}.
- ${cityName}'s population is approximately ${population / 1000000} million.
- </util:lookup>
- </body>
- </html>
- </jsp:root>
附录:
标签文件中常用的指令:
| tag | 类似JSP page指令,可以用于import常用的java类库等 |
| include | 导入其他的标签定义文件 |
| taglib | 使用其他标签,如jstl, spring tag, struts tag等等 |
| attribute | 定义一个属性 |
| variable | 定义一个jsp page中可见的变量,默认范围为NESTED,表示标签内有效。可选项有AT_BEGIN和AT_END |
这些指令的可选属性
| body-content | 标签body的处理方式 ,可选项: 'empty', 'tagdependent' or 'scriptless' |
| import | 导入使用的java类库 |
| pageEncoding | 设置页面编码 |
| isELIgnored | 是否忽略el表达式 |
| dynamic-attributes | 用于存储自定义属性的map,所谓的自定义属性指:未隐式申明的变量 |
| language | 使用的脚本语言,目前必须是java |
| display-name | 标签名 |
| small-icon | for tools |
| large-icon | for tools |
| description | 标签作用描述 |
| example | informal description of how the tag is used |
<jsp:directive:attribute>的可选属性
| name | 属性名 |
| required | true or false |
| rtexprvalue | true or false - 指定是否支持运行时表达式 |
| type | 值类型 - 默认是java.lang.String |
| fragment | true or false - 值先传递给容器(false), 直接传给标签处理方法(true) |
| description | 属性描述 |
<jsp:directive:variable>的可选属性
| name-given | 变量名(标签使用时的变量名) |
| name-from-attribute | Specifies the name of an attribute, whose value is the name of the variable that will be available in the calling JSP page. Exactly one of name-given or name-from-attribute must be supplied. |
| alias | A locally scoped variable which will store the variable's value. Used only with name-from-attribute. |
| variable-class | 变量类.默认是java.lang.String. |
| declare | Indicates whether the variable is declared in the calling JSP page or tag file. Default is true. Not entirely clear what this means! |
| scope | 变量范围,可选项 AT_BEGIN(标签后jsp page内有效), AT_END(标签后jsp page内有效) and NESTED. NESTED(默认,标签内有效) |
| description | 变量描述 |
自定义tag标签的方法的更多相关文章
- 自定义tag标签-实现long类型转换成Date类型
数据库里存储的是bigint型的时间,entity实体中存放的是long类型的标签,现在想输出到jsp页面,由于使用的是jstl标签,而要显示的是可读的时间类型,找来找去有个 fmt:formatDa ...
- Jsp 自定义tag标签
1转自:https://blog.csdn.net/yusimiao/article/details/46835617 Jsp自定义tag标签 自定义tag标签的好处 程序员可以自定一些特定功能的标记 ...
- struts2 自定义tag标签
在项目中可能有很多相同的jsp页面表示功能,这时可以使用自定义的tag进行定义,渐少重复的工作量便于日后维护! 下面就基于struts2进行自定义标签的定义与实现: 首先:自定义类MyTag继承str ...
- jsp如何自定义tag的标签库?
虽然和上一次的使用自定义的tld标签简化jsp的繁琐操作的有点不同,但是目的也是一致的.自定义tag比较简单. 1.新建tag标签 在WEB-INF目录下新建一个tags的文件夹,是自定义tag标签的 ...
- Inno Setup技巧[界面]添加和自定义左下角标签
原文 http://blog.sina.com.cn/s/blog_5e3cc2f30100cc49.html 本文介绍添加和自定义“左下角标签”的方法. 界面预览: Setup技巧[界面]添加和自定 ...
- 6.1 如何在spring中自定义xml标签
dubbo自定义了很多xml标签,例如<dubbo:application>,那么这些自定义标签是怎么与spring结合起来的呢?我们先看一个简单的例子. 一 编写模型类 package ...
- (转) ThinkPHP模板自定义标签使用方法
这篇文章主要介绍了ThinkPHP模板自定义标签使用方法,需要的朋友可以参考下 转之--http://www.jb51.net/article/51584.htm 使用模板标签可以让网站前台开发 ...
- 如何自定义JSTL标签与SpringMVC 标签的属性中套JSTL标签报错的解决方法
如何自定义JSTL标签 1.创建一个类,从SimpleTagSupport继承 A) 通过继承可以获得当前JSP页面上的对象,如JspContext I) 实际上可以强转为PageContext II ...
- JSP自定义tag控件标签
JSP支持自定tag的方法,那就是直接讲JSP代码保存成*.tag或者*.tagx的标签定义文件.tag和tagx文件不仅支持经典jsp代码,各种标签模版代码,还支持xml样式的jsp指令代码. 按照 ...
随机推荐
- 再也不用克隆多个仓库啦!git worktree 一个 git 仓库可以连接多个工作目录
我在 feature 分支开发得多些,但总时不时被高优先级的 BUG 打断需要临时去 develop 分一个分支出来解 BUG.git 2.6 以上开始提供了 worktree 功能,可以解决这样的问 ...
- 优化 UWP 中图片的内存占用
跟图片打交道的 UWP 应用或多或少都会遇到图片带来的性能问题,就算不主要处理图片,做个论坛做个新闻客户端都涉及到大量图片.一个帖子.一篇文章里多半都是些高清大图,这些图片一张即可占用程序 1~2M ...
- MYSQL在当前日期的基础上加上N(年月日分秒)
//把id为1的那条数据的开始时间改为现在 结束时间改为开始时间的1个月后 update 表明 set begintime=now(),endtime=date_add(NOW(), interv ...
- RF第二讲--Selenium2Library库的简单实用
现在对于RF的应用方法已经有很多书介绍了,网上也可以搜到免费的电子书可以学习.今天就简单和大家介绍一下RF的用法之一,就是基于Selenium2Library库的使用. 1.首先需要安装Seleniu ...
- apache与nginx对比优势及劣势
1.nginx相对于apache的优点:轻量级,同样起web 服务,比apache占用更少的内存及资源抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能 ...
- lapis 数据库配置
备注: 目前支持 postgresql .mysql (实际使用大家可以尝试用下tidb.CockroachDB) 1. pg数据库配置 // config.lua local config = ...
- luvcview,使用mplayer查看摄像头和luvcview保存YUV图像视频的播放(转)
luvcview,使用mplayer查看摄像头和luvcview保存YUV图像视频的播放 在mplayer中查看摄像头,可使用如下命令:mplayer tv:// -tv driver=v4l2:in ...
- Python——你应该知道这些
1. Python的出生 1989年 Guido van Rossum开始编写Python语言编辑器(龟叔为了打发无聊的圣诞节) 1991年 第一个Python编译器诞生(正式诞生) 1994年 Py ...
- NETCTOSS - 中国电信运营支持系统-网络版_V-1.0
NETCTOSS - 中国电信运营支持系统-网络版_V-1.0 NETCTOSS: C:China T:Telecom 电信 O:Operation 运营 S:Support 支持 S:System ...
- 【经验】实现STL算法时遇到的模板编译错误问题
在实现set_union算法时调用了自己写的copy算法,出现了以下问题. Error 1 error C2665: 'xyz_stl::__copy' : none of the 2 overloa ...