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

时间:2013-09-26 11:56:11

标签: jsf-2 facelets taglib

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

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

  

10.3.2 Facelet标签库机制

     

...

     

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

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

  •   
  • 通过将标记库描述符文件放在Web应用程序类路径的jar中来进行自动发现,命名文件使其以“.taglib.xml”结束,不带引号,并将文件放在{ {1}}中的目录   jar文件。

  •   
     

...

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

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

1 个答案:

答案 0 :(得分:3)

没有使用taglib.xml。它通过com.sun.faces.facelets.tag.jsf.html.HtmlLibrary中的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));