标签:pen 编译 val cti 脚本 rom spl color script
前言:在之前我们介绍了自定义标签,通过写无脚本的JSP文件,可以促进分工,页面设计者可以和后台逻辑编码者同时进行工作。但是,编写自定义标签太过冗长琐碎。从JSP2.0开始,通过 tag file 的方式,无须编写标签处理类和标签描述文件,也能够自定义标签。
tag file 从两个方面简化了自定义标签的开发。首先,tag file 无须提前编译,直到第一次被调用才会编译。除此之外,仅仅使用JSP语法就可以完成标签的扩展定义。
其次,标签库描述文件也不再需要了。
JSP容器提供多种方式将 tag file 编译成Java的标签处理类。例如Tomcat将 tag file 翻译成继承于 javax.servlet.jsp.tagext.SimpleTag接口的标签处理类。
一个 tag file 和JSP页面一样,拥有指令,脚本,EL表达式,动作元素以及自定义的标签。一个tag file以 tag 或者 tagx 为后缀,它们可以包含其他资源文件。一个被其他文件包含的 tag file 应该以 tagf 为后缀。
tag file 中也有一些隐藏对象,通过脚本或者EL表达式可以访问这些隐藏对象。这些对象与JSP中的隐藏对象相似。
对象 | 类型 |
request | javax.servlet.http.HttpServletRequest |
response | javax.servlet.http.HttpServletResponse |
out | javax.servlet.jsp.JspWriter |
session | javax.servlet.http.HttpSession |
appliction | javax.servlet.ServletContext |
config | javax.servlet.ServletConfig |
jspContext | javax.servlet.jsp.JspContext |
下面这个例子包含一个 tag 文件和一个使用这个tag文件的JSP页面。这个tag file的名称是firstTag.tag,代码清单如下:
<%@ tag import="java.util.Date" import="java.text.DateFormat"%> <% DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG); Date now = new Date(System.currentTimeMillis()); out.print(dateFormat.format(now)); %>
<%@ taglib prefix="easy" tagdir="/WEB-INF/tags"%> Today is <easy:firstTag/>
和JSP页面一样,tag file 可以使用指令来指挥JSP容器如何编译这个tag file。
除了page指令,其他所有的JSP指令都可以用于tag file。在tag file 中,可以使用tag指令代替page指令。 另外,你还可以使用两个新指令:attribute 和 variable。
指令 | 描述 |
tag | 作用与JSP页面中的page指令类似 |
include | 用于将其他资源导入tag file |
taglib | 用于将自定义标签库导入tag file |
attribute | 用于将自定义标签库导入tag file |
variable | 用于将自定义标签库导入tag file |
tag指令与JSP中的page指令类似。以下是属性表。
属性 | 描述 |
display-name | 在XML工具中显示的名称。默认值是不包含后缀的tag file |
body-content | 指定标签body的类型,body-content属性值有empty、tagdependent、scriptless,默认值是scriptless |
dynamic-attributes | 指定tag file动态属性的名称。当dynamiattributes值被设定时,会产生一个Map来存放这些动态属性的名称和对应的值 |
small-icon | 指定一个图片路径,用于在XML上显示小图标 |
large-icon | 指定一个图片路径,用于在XML上显示大图标 |
description | 标签的描述信息 |
example | 标签使用实例的描述 |
language | tag file 中使用的脚本你语言类型。必须设为“java” |
import | 用于导入一个java类型,和JSP页面中的import相同 |
pageEncoding | 指定tag file使用的编码格式 |
除了import属性,其他所有的属性在一个tag指定或一个tag file 中都只能出现一次。
tag file 中的include指令和JSP页面中的include是一样的。
可以通过taglib指令在tag lib中使用自定义标签。taglib指令的语法如下:
<%@ taglib uri="taglibraryURI" prefix="tagPrefix" %>
attribute 用于设定tag file中的标签的属性。它与标签库描述文件中的attribute元素等效。
attributr 指令的的属性如下,其中只有name属性是必须的。
属性 | 描述 |
name | 用于设定该属性的名称。在一个tag file中,每个属性的名称是唯一的 |
required | 用于设定该属性是否是必须的。值可以取TRUE和FALSE |
fragment | 用于设定该属性是否是fragment。 |
rtexprvalue | 用于设定该属性的值是否在运行时被动态计算 |
type | 用于设定该属性的类型 |
description | 用于设定该属性的描述信息 |
通过variable 可以将tag file 中的一些值传递到JSP页面。variable指令的语法如下:
<% variable (attribute="value")* %>
variable 指令的属性参见下表:
属性 | 描述 |
name-given | 变量名。 |
name-from-attribute | 和name-given属性类似,由标签属性的值来决定变量的名称。如果两者属性同时出现或都不出现会出现错误 |
alias | 设定一个用来接收变量值的局部范围 |
variable-class | 变量的类型 |
declare | 设定该变量是否声明 |
scope | 用于指定该变量的范围 |
description | 用于描述该变量 |
与JspWriter对比:JspWriter只能简单地将一个String传递到JSP页面,灵活性很差。
doBody动作元素只能在tag file中使用,它用来调用一个标签的本体内容。
doBody动作元素也可以有属性。你可以通过这些属性来指定某个变量来接收主题内容,如果不适用这些指令,那么doBody动作会把主体内容写到JSP页面的JspWriter上。
doBody动作元素的属性如下表:
属性 | 描述 |
var | 用于保存标签主体内容的变量值,主体内容就会以String的类型保存这个变量内。var和varReader只能出现一个 |
varReader | 用于保存标签主体内容的变量值,主体内容就会以Reader的类型保存在这个变量内 |
scope | 变量保存的作用域 |
invoke动作元素和doBody类似,在tag file中,可以使用它来调用一个fragment。invoke动作元素的属性:
属性 | 描述 |
fragment | 要调用的fragment名称 |
var | 用于保存片段主体内容的变量值,主题内容就会以String类型保存在这个变量中,var和varReader属性只能出现一个 |
varReader | 用于保存片段主体内容的变量值,主题内容就会以Reader类型保存在这个变量中,var和varReader属性只能出现一个 |
scope | 变量保存到的作用域 |
------ 天若有情天亦老,人间正道是沧桑 ------
标签:pen 编译 val cti 脚本 rom spl color script
原文地址:https://www.cnblogs.com/cardiolith/p/9593860.html