J2EE架构与程序设计(自定义Tag开发)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 给tag flie传递数据
• 使用tag的属性
• 在JSP中调用tag
• 在Tag文件Header.tag中使用属性
Biblioteka Baidu
Tag属性的作用域 限制在Tag内部
• 问<题myTags:Header subTitle=”We take the String out of SOAP” /> • 使用tag时,如何快速知晓属性名? • 属性是可选的还是必需的? • 属性只能是一个字符串文本吗?能不能用表达式? <em><strong>${subTitle}</strong></em> <br>
<%@ taglib prefix=”myTags” tagdir=”/WEB-INF/tags” %>
<html><body>
<myTags:Header/>
Welcome to our site. </body></html>
Tag的名字就是 tag文件的文件名
Tag文件存 放的位置
Tag Files
<function-signature>
int rollDice()
The JSP
</function-signature>
</function> </taglib>
<%@ taglib prefix=”mine” uri=”DiceFunctions” %>
<html><body>
函数名rollIt()来自于TLD
<function-signature>int rollDice()</function-signature>
</function>
<uri>randomThings</uri> 在taglib指令中使用的唯一名字
可选的
<tag> <description>random advice</description>
Tag Files
• 容器查找Tag文件的方法
• WEB-INF/tags目录 • WEB-INF/tags的子目录 • WEB-INF/lib目录的JAR文件中
的META-INF/tags目录 • WEB-INF/lib目录的JAR文件中
的META-INF/tags的子目录 • 如果tag文件部署在JAR文件中,
<img src=”images/Web-Services.jpg” > <br>
<em><strong><jsp:doBody/></strong></em> <br>
被替换成tag body中的内容
Tag Files
• 使用tag指令的body-content属性声明tag体的内容
• 属性值
• scriptless: 缺省值,表示不能有脚本元素。脚本元素是Java代码片断(<%...%>);表达 式(<%=…%>);和声明(<%!...%>)
• 请求参数能否将客户发送的表单中的数据作为请求的一 部分?
• 应用会经常添加或变更请求参数,用它们给嵌入的文件 传值是否清晰?
• 怎样使嵌入的内容容易理解?
Tag Files
• 使用Tag File
• 将需嵌入的文件扩展名改为.tag
• Header.tag
• 将以上<itmagg文sr件c=”放im到ag一es个/W目eb-录Se下rv,ic如esW.jEpgB”-I>NF</btra>gs • 在源JSP中使用taglib指令,并调用tag
${mine:rollIt()} </body></html>
中的name,而不是实际 Java类中的方法名
如何使用自定义Tag
• 部署EL函数
调用EL函 数的JSP 页面
• 提供函数方法的Java类必须能被Web应用的各部分访问到,所以 应该部署到WEB-INF/classes目录中
• TLD文件放在WEB-INF目录或其子目录中,并保证JSP中的taglib 指令的uri属性与TLD的<rui>元素匹配
We take the sting out of SOAP. OK, so it’s not Jini,<br> but we’ll help you get through it with the least<br> frustration and hair loss.
</myTagTsag:HFeilea:deHre>ader.tag
的操作 • 运行时,容器调用这些操作 • 也称为自定义标签
• 自定义标签的特点
• 可以通过调用它的页面传递来的属性进行定制化 • 可以向调用它的页面传回变量 • 可以访问JSP页面可用的所有对象 • 可以互相通信 • 可以嵌套,并通过私有变量通信
概述
• 创建tag处理器的方法
• Tag Files
必需的,在tag中使用,
<name>advice</name>
如<my:advice>
<tag-class>foo.AdvisorTagHandler</tag-class>
<body-content>empty</body-content>
public class DiceRoller {
public static int rollDice() {
return (int) ((Math.random()*6)+1);
}
}
The Tag Library Descriptor (TLD) file
<?xml version=”1.0” encoding=”ISO-8859-1” ?> <taglib 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/webjsptaglibrary_2_0.xsd” version=”2.0”>
<tlib-version>1.2</tlib-version> <uri>DiceFunctions</uri>
<function>
uri属性将TLD的名字告诉容器, 以便容器知道JSP调用EL函数 时应调用哪个Java方法
<name>rollIt</name>
<function-class>foo.DiceRoller</function-class>
则对应该tag文件必须有一个 TLD
• 为什么不统一使用TLD声明 tag?
必须有一个 TLD与之对应
如何使用自定义Tag
• 认识Tag Library Descriptor (TLD)
• TLD描述了
• EL函数(EL functions) • 自定义Tag
• 用EL函数扩展EL的功能
• 通过EL表达式调用一个POJO上的静态方法 • 通过四个步骤完成
• 用于开发展现为中心的自定义Tag • 可利用已经存在的标签库 • 可供不懂Java的页面编辑人员使用 • 被容器转化成simple tag处理器
• Simple Tags
• 只能用于在属性值或tag体中不使用脚本的tag中
• Classic Tags
• 只能用于在属性值或tag体中需要使用脚本的tag中
Tag Files
• 使用tag体传递大段文本
• 在JSP中调用tag
<%@ taglib prefix=”myTags” tagdir=”/WEB-INF/tags” %> <html><body>
<myTags:Header>
We take the sting out of SOAP. OK, so it’s not Jini,<br>
• empty: tag体中不能有内容
• tagdependent: 将tag体看作纯文本,EL, tags和脚本将不被求值
Tag Files
• 例子: 在JSP中调用tag
<%@ taglib prefi x=”myTags” tagdir=”/WEB-INF/tags” %> <html>
<myTags:Header fontColor=”#660099”>
Tag Files
• 复习:向JSP中动态添加可复用的内容
• <jsp:include> • <c:import> • 通过<jsp:param>和<c:param>创建嵌入的文件可以使用
的请求参数,这样可以定制嵌入的文件的行为
• 问题
• 只是为了给嵌入的文件一些客户化信息,就创建新的请 求参数?
Tag Files
• 属性指令
• Header.tag
属性是必需的
属性可以是字符 串文本或表达式
<%@ attribute name=”subTitle” required=”true” rtexprvalue=”true” %> <img •sr使c用=”tiamg的agJeSsP/页We面b-Services.jpg” > <br>
• Tag Fbileu:t Hweea’dlelr.thaeglp you get through it with the least<br>
frustration and hair loss.
</myTags:Header>
<br> Contact us at: ${initParam.mainEmail} </body></html>
J2EE架构与程序设计
第九章 自定义Tag开 发
主要内容
• Tag Files • 如何使用自定义Tag • Tag处理器
• Simple Tag处理器 • Classic Tag处理器
• Tag的嵌套访问
概述
• 什么是定制的标签(Custom Tag)
• 是一种用户自定义的JSP语言元素 • 容器将JSP转化成servlet时,Tag被转化成对Tag处理器
<br> Contact us at: ${initParam.mainEmail} </body></html>
<%@ attribute name=”fontColor” required=”true” %>
<%@ tag body-content=”tagdependent” %>
<img src=”images/Web-Services.jpg” > <br> <em><strong><font color=”${fontColor}”><jsp:doBody/></font></strong></em> <br>
<tlib-version>1.2</tlib-version> <short-name>RandomTags</short-name> <function>
强制性的,主要为工具使用
<name>rollIt</name>
<function-class>foo.DiceRoller</function-class>
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd”
version=”2.0”>
该tag(不是值)是强制性的,指明tag库的版本
<em><strong>${subTitle}</strong></em> <br>
<%@ taglib prefi x=”myTags” tagdir=”/WEB-INF/tags” %> <html><body> <myTags:Header subTitle=”We take the String out of SOAP” /> <br> Contact us at: ${initParam.mainEmail} </body></html>
• 写一个具有公共静态方法的Java类 • 写TLD文件,它实现了定义函数功能的Java类到调用函数的JSP页面间的映射 • 在JSP中使用taglib指令 • 使用EL调用该函数
如何使用自定义Tag The class with the function 功能方法必须
package foo;
是公共静态的
声明了函数类, 方法签名和函数 名的TLD
定义了函数功 能的Java类
如• 用何TLD使描述用自定义自Tag定义Tag
<?xml version=”1.0” encoding=”ISO-8859-1” ?>
<taglib xmlns=”http://java.sun.com/xml/ns/j2ee”
• 使用tag的属性
• 在JSP中调用tag
• 在Tag文件Header.tag中使用属性
Biblioteka Baidu
Tag属性的作用域 限制在Tag内部
• 问<题myTags:Header subTitle=”We take the String out of SOAP” /> • 使用tag时,如何快速知晓属性名? • 属性是可选的还是必需的? • 属性只能是一个字符串文本吗?能不能用表达式? <em><strong>${subTitle}</strong></em> <br>
<%@ taglib prefix=”myTags” tagdir=”/WEB-INF/tags” %>
<html><body>
<myTags:Header/>
Welcome to our site. </body></html>
Tag的名字就是 tag文件的文件名
Tag文件存 放的位置
Tag Files
<function-signature>
int rollDice()
The JSP
</function-signature>
</function> </taglib>
<%@ taglib prefix=”mine” uri=”DiceFunctions” %>
<html><body>
函数名rollIt()来自于TLD
<function-signature>int rollDice()</function-signature>
</function>
<uri>randomThings</uri> 在taglib指令中使用的唯一名字
可选的
<tag> <description>random advice</description>
Tag Files
• 容器查找Tag文件的方法
• WEB-INF/tags目录 • WEB-INF/tags的子目录 • WEB-INF/lib目录的JAR文件中
的META-INF/tags目录 • WEB-INF/lib目录的JAR文件中
的META-INF/tags的子目录 • 如果tag文件部署在JAR文件中,
<img src=”images/Web-Services.jpg” > <br>
<em><strong><jsp:doBody/></strong></em> <br>
被替换成tag body中的内容
Tag Files
• 使用tag指令的body-content属性声明tag体的内容
• 属性值
• scriptless: 缺省值,表示不能有脚本元素。脚本元素是Java代码片断(<%...%>);表达 式(<%=…%>);和声明(<%!...%>)
• 请求参数能否将客户发送的表单中的数据作为请求的一 部分?
• 应用会经常添加或变更请求参数,用它们给嵌入的文件 传值是否清晰?
• 怎样使嵌入的内容容易理解?
Tag Files
• 使用Tag File
• 将需嵌入的文件扩展名改为.tag
• Header.tag
• 将以上<itmagg文sr件c=”放im到ag一es个/W目eb-录Se下rv,ic如esW.jEpgB”-I>NF</btra>gs • 在源JSP中使用taglib指令,并调用tag
${mine:rollIt()} </body></html>
中的name,而不是实际 Java类中的方法名
如何使用自定义Tag
• 部署EL函数
调用EL函 数的JSP 页面
• 提供函数方法的Java类必须能被Web应用的各部分访问到,所以 应该部署到WEB-INF/classes目录中
• TLD文件放在WEB-INF目录或其子目录中,并保证JSP中的taglib 指令的uri属性与TLD的<rui>元素匹配
We take the sting out of SOAP. OK, so it’s not Jini,<br> but we’ll help you get through it with the least<br> frustration and hair loss.
</myTagTsag:HFeilea:deHre>ader.tag
的操作 • 运行时,容器调用这些操作 • 也称为自定义标签
• 自定义标签的特点
• 可以通过调用它的页面传递来的属性进行定制化 • 可以向调用它的页面传回变量 • 可以访问JSP页面可用的所有对象 • 可以互相通信 • 可以嵌套,并通过私有变量通信
概述
• 创建tag处理器的方法
• Tag Files
必需的,在tag中使用,
<name>advice</name>
如<my:advice>
<tag-class>foo.AdvisorTagHandler</tag-class>
<body-content>empty</body-content>
public class DiceRoller {
public static int rollDice() {
return (int) ((Math.random()*6)+1);
}
}
The Tag Library Descriptor (TLD) file
<?xml version=”1.0” encoding=”ISO-8859-1” ?> <taglib 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/webjsptaglibrary_2_0.xsd” version=”2.0”>
<tlib-version>1.2</tlib-version> <uri>DiceFunctions</uri>
<function>
uri属性将TLD的名字告诉容器, 以便容器知道JSP调用EL函数 时应调用哪个Java方法
<name>rollIt</name>
<function-class>foo.DiceRoller</function-class>
则对应该tag文件必须有一个 TLD
• 为什么不统一使用TLD声明 tag?
必须有一个 TLD与之对应
如何使用自定义Tag
• 认识Tag Library Descriptor (TLD)
• TLD描述了
• EL函数(EL functions) • 自定义Tag
• 用EL函数扩展EL的功能
• 通过EL表达式调用一个POJO上的静态方法 • 通过四个步骤完成
• 用于开发展现为中心的自定义Tag • 可利用已经存在的标签库 • 可供不懂Java的页面编辑人员使用 • 被容器转化成simple tag处理器
• Simple Tags
• 只能用于在属性值或tag体中不使用脚本的tag中
• Classic Tags
• 只能用于在属性值或tag体中需要使用脚本的tag中
Tag Files
• 使用tag体传递大段文本
• 在JSP中调用tag
<%@ taglib prefix=”myTags” tagdir=”/WEB-INF/tags” %> <html><body>
<myTags:Header>
We take the sting out of SOAP. OK, so it’s not Jini,<br>
• empty: tag体中不能有内容
• tagdependent: 将tag体看作纯文本,EL, tags和脚本将不被求值
Tag Files
• 例子: 在JSP中调用tag
<%@ taglib prefi x=”myTags” tagdir=”/WEB-INF/tags” %> <html>
<myTags:Header fontColor=”#660099”>
Tag Files
• 复习:向JSP中动态添加可复用的内容
• <jsp:include> • <c:import> • 通过<jsp:param>和<c:param>创建嵌入的文件可以使用
的请求参数,这样可以定制嵌入的文件的行为
• 问题
• 只是为了给嵌入的文件一些客户化信息,就创建新的请 求参数?
Tag Files
• 属性指令
• Header.tag
属性是必需的
属性可以是字符 串文本或表达式
<%@ attribute name=”subTitle” required=”true” rtexprvalue=”true” %> <img •sr使c用=”tiamg的agJeSsP/页We面b-Services.jpg” > <br>
• Tag Fbileu:t Hweea’dlelr.thaeglp you get through it with the least<br>
frustration and hair loss.
</myTags:Header>
<br> Contact us at: ${initParam.mainEmail} </body></html>
J2EE架构与程序设计
第九章 自定义Tag开 发
主要内容
• Tag Files • 如何使用自定义Tag • Tag处理器
• Simple Tag处理器 • Classic Tag处理器
• Tag的嵌套访问
概述
• 什么是定制的标签(Custom Tag)
• 是一种用户自定义的JSP语言元素 • 容器将JSP转化成servlet时,Tag被转化成对Tag处理器
<br> Contact us at: ${initParam.mainEmail} </body></html>
<%@ attribute name=”fontColor” required=”true” %>
<%@ tag body-content=”tagdependent” %>
<img src=”images/Web-Services.jpg” > <br> <em><strong><font color=”${fontColor}”><jsp:doBody/></font></strong></em> <br>
<tlib-version>1.2</tlib-version> <short-name>RandomTags</short-name> <function>
强制性的,主要为工具使用
<name>rollIt</name>
<function-class>foo.DiceRoller</function-class>
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd”
version=”2.0”>
该tag(不是值)是强制性的,指明tag库的版本
<em><strong>${subTitle}</strong></em> <br>
<%@ taglib prefi x=”myTags” tagdir=”/WEB-INF/tags” %> <html><body> <myTags:Header subTitle=”We take the String out of SOAP” /> <br> Contact us at: ${initParam.mainEmail} </body></html>
• 写一个具有公共静态方法的Java类 • 写TLD文件,它实现了定义函数功能的Java类到调用函数的JSP页面间的映射 • 在JSP中使用taglib指令 • 使用EL调用该函数
如何使用自定义Tag The class with the function 功能方法必须
package foo;
是公共静态的
声明了函数类, 方法签名和函数 名的TLD
定义了函数功 能的Java类
如• 用何TLD使描述用自定义自Tag定义Tag
<?xml version=”1.0” encoding=”ISO-8859-1” ?>
<taglib xmlns=”http://java.sun.com/xml/ns/j2ee”