2012-01-26 2 views
1

Я не могу упаковать taglibrary в файл войны. Я переместил теги из проекта в дополнительную библиотеку, текущий текущий проект зависит. Я поместил файл taglibrary в каталог META-INF контейнера с меткой (как описано here). Но страница не работает:Механизм библиотеки тегов Facelet не работает должным образом

Expression Error: Named Object: eu.barbucha.barbatag.simple.PropertyTag not found. 

Сервер может найти taglibrary. В противном случае работает страница, появляется только один Варинг:

Warning: This page calls for XML namespace http://barbucha.eu/tags declared with prefix br but no taglibrary exists for that namespace. 

Таким образом, вопрос: Почему сервер находит только дескриптор, но не классы? Когда я копирую классы из WEB-INF/lib/barbatag.jar в WEB-INF/classes и перезагружаю webapp в консоли администратора, страница начинает работать. Сервер также находит UI-компоненты только в том случае, если они задействованы непосредственно в классах приложения, но не в банке, хранящейся в каталоге WEB-INF/lib. С другой стороны, сервер загружает дескриптор taglib из банки. Это действительно сбивает с толку ... Декларация критического класса:

package eu.barbucha.barbatag.simple;  

@FacesComponent("eu.barbucha.barbatag.simple.PropertyTag") 
public class PropertyTag extends UIComponentBase { ... } 

Определение критической тэгом:

<tag> 
    <display-name>The component taking values from a property file</display-name> 
    <tag-name>property</tag-name> 
    <component> 
     <component-type>eu.barbucha.barbatag.simple.PropertyTag</component-type> 
    </component> 
</tag> 

Один potentionally важный момент: Я использую Spring MVC.

+0

Похоже, что в моем тег-библиотеке JAR отсутствует файл 'faces-config.xml'. В противном случае спецификация JSF не требует сканирования аннотаций. (См. [Не удается найти аннотированный пользовательский компонент JSF2 в банке] (http://stackoverflow.com/questions/6150926/cannot-find-annotated-custom-jsf2-component-in-jar)) –

ответ

3

Вам необходимо предоставить файл /META-INF/faces-config.xml в JAR, чтобы получить JSF для сканирования файла JAR для классов с конкретными аннотациями JSF, такими как @FacesComponent. Это делается для предотвращения нежелательного сканирования JSF каждого отдельного файла JAR для классов (это может быть очень много времени и процессор, если у вас их много).

+1

Спасибо. Пустой 'faces-config.xml' (содержащий только' '), расположенный в каталоге «META-INF» в taglib JAR, решил мою проблему. –

+0

Добро пожаловать. – BalusC