当前页面: 开发资料首页 → Netbeans 专题 → 使用 NetBeans IDE 5.0 开发标记库教程
摘要: 使用 NetBeans IDE 5.0 开发标记库教程 反馈 标记库是用于处理 JavaServer Pages!' 页面(JSP!' 页面)中常用功能(如格式化文本、加载图形和显示当前日期)的标记集...
标记库是用于处理 JavaServer Pages!" 页面(JSP!" 页面)中常用功能(如格式化文本、加载图形和显示当前日期)的标记集合。根据在 JSP 文件中它的正文内容可以对标记进行分类:
<disp:FormatTextTag style="official">My Company</disp:FormatTextTag>
该标记使用 JavaServer Pages!" 技术(JSP!" 语法”)或 Java!" 编程语言的语法来格式化文本“My Company”。
<disp:DisplayLogoTag size="large"/>
该标记使用 JSP 语法或 Java 编程语言来显示图形:
由于 NetBeans IDE 5.0 实现了 JavaServer Pages!" 2.0 规范,因此,您可以选择用 JSP 语法创建标记文件 或用 Java 编程语言创建标记句柄,或两者都使用。标记文件对标记句柄的作用就像 JavaServer Pages 页面对 Java!" servlet 的作用:它们使 web 开发者能够创建复杂的功能,而不需要熟悉 Java 编程语言。
标记库描述符 (TLD) 是一个 XML 文档,该文档将库中的每个标记映射到它关联的标记句柄,或者映射到它关联的标记文件。TLD 描述了与标记库中标记关联的参数和脚本变量。
尽管它是一个 taglib 指令,但是却可以将标记库用于使用 JavaServer Pages!" 技术(JSP!" 页面)创建的页面。
标记库教程向您介绍如何创建自己的标记库以及如何在 web 应用程序中使用它的标记。但是,通常您不需要创建自己的标记,因为其他人已经创建了很多标记。本教程向您介绍如何将这些外部标记合并到您自己的 web 应用程序中。
本教程中构建的 web 应用程序将向您介绍如何执行以下操作:
IDE 将创建 $PROJECTHOME/MyCompany 项目文件夹。项目文件夹包括所有的源代码和项目元数据,例如项目 Ant 脚本。MyCompany 项目在 IDE 中打开。可以在 Projects 窗口中查看其逻辑结构,在 Files 窗口中查看其文件结构。
通常,您不需要自己创建自定义标记。在 web 应用程序中可以免费使用很多自定义标记。
在本教程的后面部分,您将创建使用 JSTL 1.1 库中标记的标记文件。该库是与 NetBeans IDE 5.0 一起打包的。但是,您需要将它添加到您项目的类路径中。
现在 Libraries 节点包含两个由 JSTL 1.1 库组成的 JAR 文件:
在本教程的后面部分,您将创建使用 Jakarta 项目的 DateTime Tag Library 中标记的 JSP 文件。该库包含可以用于处理与日期和时间有关的功能的标记。例如,用于格式化日期以便进行输出的标记、从 HTML 格式输入生成的日期的标记、使用时区和本地化的标记。
现在 Libraries 节点包含 taglibs-datetime.jar 文件。
对于您在本教程中创建的每个标记句柄,IDE 生成从 SimpleTagLib TLD 文件到标记句柄的 Java 类中标记的实现。只有您希望在本教程中使用标记句柄 的情况下,例如使用 Java 源文件而不是 JSP 文件,则需要创建一个 TLD。标记文件 即在 JSP 语法中而不是在 Java 编程语言中定义的标记,不需要 在 TLD 中注册,因此,此处也不需要 IDE 注册。
IDE 创建 web/WEB-INF/tlds 文件夹并向它中添加标记库描述符。SimpleTagLib.tld 在 Source Editor 中打开。
您不需要了解 Java 编程语言也可以创建标记。如果喜欢使用 JSP 语法,则使用方案 1 来创建标记文件。否则使用方案 2 创建使用 Java 编程语言标记句柄。
<%@tag description = "Display logo" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@attribute name="size" required="true"%> <c:choose> <c:when test="${size == 'large'}"> <img src='logos/LogoLarge.gif' align='Center'> </c:when> <c:otherwise> <img src='logos/LogoSmall.gif' align='Center'> </c:otherwise> </c:choose> <jsp:doBody/>
注意: 此标记文件包含一个 <%@taglib> 指令和一个 uri 属性,它指定前缀 c 是指 JSTL 1.1 库中的标记句柄。有关此指令的详细信息,请参阅下面的使用标记部分。为了能够使用 JSTL 1.1 库,您必须将它添加到您的 web 应用程序中,如上面的访问打包的 JSTL 1.1 库中的标记部分所述。
DisplayLogoTag.java 在 Source Editor 中打开。
if (size.equals("large")) out.println("<img src='logos/LogoLarge.gif' align='Center' />"); else out.println("<img src='logos/LogoSmall.gif' align='Center' />");
同样,您不需要了解 Java 编程语言也可以创建标记。如果喜欢使用 JSP 语法,则使用方案 1 来创建标记文件。否则使用方案 2 创建使用 Java 编程语言标记句柄。
<%@tag description = "Format text" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@attribute name="style" required="true"%> <c:choose> <c:when test="${style == 'official'}"> <b><i><font size='+3' color='red'> </c:when> <c:otherwise><font size='+1'></c:otherwise> </c:choose> <jsp:doBody/> <c:choose> <c:when test="${style == 'official'}"> </font></i></b> </c:when> <c:otherwise></font></c:otherwise> </c:choose>
注意: 此标记文件包含一个 <%@taglib> 指令和一个 uri 属性,它指定前缀 c 是指 JSTL 1.1 库中的标记句柄。有关此指令的详细信息,请参阅下面的使用标记部分。为了能够使用 JSTL 1.1 库,您必须将它添加到您的 web 应用程序中,如上面的访问打包的 JSTL 1.1 库中的标记部分所述。
if (style.equals("official")) out.println("<b><i><font size='+3' color='red'>"); else out.println("<font size='+1'> ");
if (style.equals("official")) out.println("</font></i></b>"); else out.println("</font>");
<%@taglib prefix="disp" tagdir="/WEB-INF/tags" %>
<%@taglib uri="http://netbeans.org/tlds/SimpleTagLib" prefix="disp" %>
<%@taglib uri="http://jakarta.apache.org/taglibs/datetime-1.0" prefix="dt" %>
<body> <disp:DisplayLogoTag size="large"/> <disp:FormatTextTag style="official">My Company</disp:FormatTextTag> <p><blockquote>This is <disp:FormatTextTag style="professional">My Company</disp:FormatTextTag>. It's a fun company and we make extremely useful products.</blockquote> <p align="center"><disp:DisplayLogoTag size="small"/> My Company<br> 1234 Any St.<br> Anytown, CA 95110 <br><br> Today's date: <b><dt:format pattern="MM/dd/yyyy"><dt:currentTime/></dt:format></b> </body>
如果您选择 Java 方法(方案 2)来创建标记句柄,则您只能使用以下两个故障解决策略。
本教程中创建的 SimpleTagLib TLD 文件将库中的标记映射到关联的标记句柄。当您编译 index.jsp 文件时,NetBeans IDE 识别在 JSP 文件中使用的映射和相应的标记使用方法之间的冲突。为了说明此问题,请执行以下操作:
<disp:FormatTextTag style="official">My Company</disp:FormatTextTag>将其与 DisplayLogoTag 的实例对比,DisplayLogoTag 的实例在 index.jsp 文件中为为 空。
<disp:DisplayLogoTag size="large"/>
<disp:DisplayLogoTag size="small"/>
<%@taglib uri="http://netbeans.org/tlds/SimpleTagLib" prefix="disp" %>
org.apache.jasper.JasperException: According to TLD, tag disp:FormatTextTag must be empty, but is not
PermittedTaglibsTLV 验证器是 JSTL 1.1 库的一部分。它允许 TLD 限制除了它自身之外可能导入到 JSP 文件中的标记库。
注意: 您必须在 <param-value> 部分中指定允许的标记库的 URI。标记库具有一个 URI 属性,而标记文件没有。因此,PermittedTaglibs 验证器是标记句柄当前唯一支持的验证器。
<validator> <validator-class> javax.servlet.jsp.jstl.tlv.PermittedTaglibsTLV </validator-class> <init-param> <param-name>permittedTaglibs</param-name> <param-value> http://jakarta.apache.org/taglibs/datetime-1.0 </param-value> </init-param> </validator>
<%@taglib uri="http://netbeans.org/tlds/ApprovedTagLibs" prefix="apptglib" %>
org.apache.jasper.JasperException: <h3>Validation error messages from TagLibraryValidator for accepted-taglibs<p>null: taglib apptglib (urn:jsptld:/WEB-INF/tlds/accepted-taglibs) allows only the following taglibs to be imported: [http://jakarta.apache.org/taglibs/datetime-1.0]</p>
<validator> <validator-class> javax.servlet.jsp.jstl.tlv.PermittedTaglibsTLV </validator-class> <init-param> <param-name>permittedTaglibs</param-name> <param-value> http://jakarta.apache.org/taglibs/datetime-1.0 http://netbeans.org/tlds/SimpleTagLib </param-value> </init-param> </validator>
有关使用 NetBeans IDE 5.0 的更多信息,请参见以下参考资料:
要发送评论和建议、获得支持和随时获得关于 NetBeans IDE J2EE 开发特性的最新发展情况,请加入 nbj2ee@netbeans.org 邮件列表。有关 NetBeans IDE 中即将到来的 J2EE 开发特性的更多信息,请参见 j2ee.netbeans.org .