当前位置:
文档之家› J2EE架构与程序设计(自定义Tag开发)
J2EE架构与程序设计(自定义Tag开发)
<%@ taglib prefix=”myTags” tagdir=”/WEB-INF/tags” %>
<html><body>
<myTags:Header/>
Welcome to our site. </body></html>
Tag的名字就是 tag文件的文件名
ቤተ መጻሕፍቲ ባይዱ
Tag文件存 放的位置
Tag Files
• 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>
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=”/xml/ns/j2ee” xmlns:xsi=”/2001/XMLSchema-instance” xsi:schemaLocation=”/xml/ns/j2ee/webjsptaglibrary_2_0.xsd” version=”2.0”>
<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>
<img src=”images/Web-Services.jpg” > <br>
<em><strong><jsp:doBody/></strong></em> <br>
被替换成tag body中的内容
Tag Files
• 使用tag指令的body-content属性声明tag体的内容
• 属性值
• scriptless: 缺省值,表示不能有脚本元素。脚本元素是Java代码片断(<%...%>);表达 式(<%=…%>);和声明(<%!...%>)
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
必需的,在tag中使用,
<name>advice</name>
如<my:advice>
<tag-class>foo.AdvisorTagHandler</tag-class>
<body-content>empty</body-content>
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>
• 请求参数能否将客户发送的表单中的数据作为请求的一 部分?
• 应用会经常添加或变更请求参数,用它们给嵌入的文件 传值是否清晰?
• 怎样使嵌入的内容容易理解?
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
<function-signature>int rollDice()</function-signature>
</function>
<uri>randomThings</uri> 在taglib指令中使用的唯一名字
可选的
<tag> <description>random advice</description>
• 写一个具有公共静态方法的Java类 • 写TLD文件,它实现了定义函数功能的Java类到调用函数的JSP页面间的映射 • 在JSP中使用taglib指令 • 使用EL调用该函数
如何使用自定义Tag The class with the function 功能方法必须
package foo;
是公共静态的
则对应该tag文件必须有一个 TLD
• 为什么不统一使用TLD声明 tag?
必须有一个 TLD与之对应
如何使用自定义Tag
• 认识Tag Library Descriptor (TLD)
• TLD描述了
• EL函数(EL functions) • 自定义Tag
• 用EL函数扩展EL的功能
• 通过EL表达式调用一个POJO上的静态方法 • 通过四个步骤完成
xmlns:xsi=”/2001/XMLSchema-instance”
xsi:schemaLocation=”/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd”
version=”2.0”>
该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>
<function-signature>
int rollDice()
The JSP
</function-signature>
</function> </taglib>
<%@ taglib prefix=”mine” uri=”DiceFunctions” %>
<html><body>
函数名rollIt()来自于TLD
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>
• empty: tag体中不能有内容
• tagdependent: 将tag体看作纯文本,EL, tags和脚本将不被求值
Tag Files
• 例子: 在JSP中调用tag
<%@ taglib prefi x=”myTags” tagdir=”/WEB-INF/tags” %> <html>
<myTags:Header fontColor=”#660099”>
J2EE架构与程序设计
第九章 自定义Tag开 发
主要内容
• Tag Files • 如何使用自定义Tag • Tag处理器