Jsf 2 如何在一个名称空间下绑定多个JSF2复合组件库

Jsf 2 如何在一个名称空间下绑定多个JSF2复合组件库,jsf-2,namespaces,taglib,composite-component,Jsf 2,Namespaces,Taglib,Composite Component,我们有一组JSF1.2 facelets组件(ui:composition)。它们被组织在不同的文件夹中,如下所示 facelets /tags /inputfields /layout /core /... 它们在一个命名空间下的标记库描述符中注册: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE facelet-taglib PUBLIC "-//Sun Mic

我们有一组JSF1.2 facelets组件(
ui:composition
)。它们被组织在不同的文件夹中,如下所示

facelets
   /tags
      /inputfields
      /layout
      /core
      /...
它们在一个命名空间下的标记库描述符中注册:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facelet-taglib PUBLIC
    "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
    "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">

<facelet-taglib>
    <namespace>http://www.ourcompany.de/jsf</namespace>

    <tag>
        <tag-name>desktop</tag-name>
        <source>./facelets/tags/layout/desktop.xhtml</source>
    </tag>

    <tag>
        <tag-name>inputField</tag-name>
        <source>./facelets/tags/inputfields/inputField.xhtml</source>
    </tag>

        ...
</facelet-taglib>

有没有一种方法可以在不将所有复合组件移动到一个文件夹的情况下为它们使用相同的名称空间?

您可以将组件移动到以文件夹名称命名的servlet 3.0 web片段中,例如input或core。每个片段都有一个子文件夹
META-INF/resources/yourBaseFolderName
。当您将这些片段合并到一个web应用程序中时,容器将把内容合并到一个文件夹中,该文件夹可以由一个公共名称空间寻址

<facelet-taglib version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd">

    <namespace>http://ourcompany.de/jsftags</namespace>    
    <composite-library-name>components/input</composite-library-name>
    <composite-library-name>components/core</composite-library-name>
    <composite-library-name>components/layout</composite-library-name>
</facelet-taglib>