JSF2:如何在 jsf-impl.jar 中发现 *.taglib.xml 文件



jsf-impl.jar(可以在 mvnrepository.com 上找到(中,*.taglib.xml文件位于目录com/sun/faces/metadata/taglib/ 中。

我不明白在这种情况下它们是如何被发现的,因为 JSF 2 规范的第 10.3.2 章说:

10.3.2 小面文档标签库机制

运行时必须支持 Facelet 标记库描述符的两种发现模式

  • 通过 Web 中的声明.xml,如第 11.1.3 节 "应用程序配置参数" 中所述

  • 通过自动发现,将标记库描述符文件放在 Web 应用程序类路径上的 jar 中,命名文件,使其以 “.taglib.xml” 结尾,不带引号,并将META-INF文件放在 jar 文件。

在这里,它们不在目录 META-INF 中,那么它是如何工作的呢?

注意:在META-INF中,它们是一些.tld文件,但我对它们不感兴趣,因为我不是使用 JSP 作为视图,而是使用 Facelets。

它没有为此使用taglib.xml。它通过com.sun.faces.facelets.tag.jsf.html.HtmlLibrary in com.sun.faces.application.ApplicationAssociate以编程方式注册它们,该在启动期间执行。以下是Mojarra 2.2.1中的相关行(从Grepcode复制粘贴(:

954        c.addTagLibrary(new CoreLibrary());
955        c.addTagLibrary(new CoreLibrary(CoreLibrary.XMLNSNamespace));
956        c.addTagLibrary(new HtmlLibrary());
957        c.addTagLibrary(new HtmlLibrary(HtmlLibrary.XMLNSNamespace));
958        c.addTagLibrary(new UILibrary());
959        c.addTagLibrary(new UILibrary(UILibrary.XMLNSNamespace));
960        c.addTagLibrary(new JstlCoreLibrary());
961        c.addTagLibrary(new JstlCoreLibrary(JstlCoreLibrary.IncorrectNamespace));
962        c.addTagLibrary(new JstlCoreLibrary(JstlCoreLibrary.XMLNSNamespace));
963        c.addTagLibrary(new PassThroughAttributeLibrary());
964        c.addTagLibrary(new PassThroughElementLibrary());
965        c.addTagLibrary(new FunctionLibrary(JstlFunction.class, FunctionLibrary.Namespace));
966        c.addTagLibrary(new FunctionLibrary(JstlFunction.class, FunctionLibrary.XMLNSNamespace));
967        if (isDevModeEnabled()) {
968            c.addTagLibrary(new FunctionLibrary(DevTools.class, DevTools.Namespace));
969            c.addTagLibrary(new FunctionLibrary(DevTools.class, DevTools.NewNamespace));
970        }
971        c.addTagLibrary(new CompositeLibrary());
972        c.addTagLibrary(new CompositeLibrary(CompositeLibrary.XMLNSNamespace));

最新更新