Как связать несколько библиотек составных компонентов JSF2 в одном пространстве имен - PullRequest
4 голосов
/ 16 января 2012

У нас есть набор компонентов Facets JSF 1.2 (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>

Мы хотим, чтобы они стали составными компонентами JSF 2и хотел бы сохранить их в отдельных папках.По соглашению JSF 2 делает их доступными как составные компоненты, если они перемещаются в папку /resources.Но для использования компонентов в представлении необходимо использовать разные пространства имен для каждой подпапки.

К сожалению, что-то вроде следующего не работает, поскольку может быть объявлено только одно имя составной библиотеки:

<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>

Есть ли способ использовать одно и то же пространство имен для всех наших составных компонентов, не перемещая их в одну папку?

1 Ответ

0 голосов
/ 12 октября 2015

Вы можете переместить свои компоненты в пару веб-фрагментов сервлета 3.0, названных именами папок, например, input или core.Каждый из этих фрагментов имеет подпапку META-INF/resources/yourBaseFolderName.Когда вы объединяете фрагменты в одно веб-приложение, контейнер объединяет содержимое в одну папку, к которой может обращаться общее пространство имен.

...