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