Ответ 1
В файле commons-web-1.0.jar
необходимо иметь совместимый с JSF 2.0 файл /META-INF/faces-config.xml
, чтобы заставить JSF сканировать файл JAR для классов с аннотациями JSF, такими как @ManagedBean
и автоматически регистрировать их.
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
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-facesconfig_2_0.xsd"
version="2.0">
</faces-config>
JSF не сканирует каждый класс каждого JAR файла в пути к классам, что было бы слишком дорого. Будут проверяться только JAR с указанным выше файлом /META-INF/faces-config.xml
.
Вы также должны убедиться, что не < > в объявлении <faces-config>
файла webapp own /WEB-INF/faces-config.xml
, в противном случае JSF будет считать, что эта конфигурация граней завершена и, следовательно, не будет автоматически сканировать файлы JAR для аннотаций.
Если ни одно из этих условий не удовлетворено (или может быть выполнено), вам необходимо вручную зарегистрировать bean как <managed-bean>
в собственном веб-приложении /WEB-INF/faces-config.xml
вместо того, чтобы полагаться на аннотации.
См. также главу 11.4.2 спецификацию JSF 2.0 (акцент мой).
11.4.2 Поведение при запуске приложения
...
Этот алгоритм обеспечивает значительную гибкость для разработчиков, которые собирают компоненты веб-сайта на основе JSF выражение. Например, приложение может включать одну или несколько пользовательских реализаций UIComponent, а также связанных с Renderers, поэтому он может объявить их в ресурсе приложения с именем "/WEB-INF/faces-config.xml", без необходимости программно регистрировать их с помощью экземпляра приложения. Кроме того, приложение может выбрать для включения библиотеки компонентов (в виде файла JAR), который включает в себя ресурс "META-INF/faces-config.xml". Существование этого ресурса заставляет компоненты, средства визуализации и другие классы реализации JSF, которые хранятся в этом библиотечный JAR файл, который будет автоматически зарегистрирован, без каких-либо действий, требуемых приложением.