Как смешать аннотации с face-config.xml - PullRequest
8 голосов
/ 22 сентября 2011

Использование JBoss 6.0.0.Final, Richfaces 3.3.3.Final, MyFaces 2.0.6, facelets 1.1.15.B1 (ограничение RF 3).

Я работаю над устаревшим проектомкоторый содержит сотни бинов, определенных в faces-config.xml.Я хотел бы сохранить те, которые определены в face-config.xml, но использовать аннотации для новых bean-компонентов.Однако, когда я попробовал это, я не имел успеха.Компоненты, определенные с помощью аннотации, т.е.

@ManagedBean
@ViewScoped
public class Foobar implements Serializable {
    // ...
}

Компонент не доступен на моей странице JSF.Я полагаю, что я указал версию 2.0 в моем face-config.xml, используя правильный заголовок.

<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.xml, чтобы аннотации также моглииспользуемый?

1 Ответ

9 голосов
/ 22 сентября 2011

Annotated bean завершится ошибкой в ​​следующих случаях:

  1. /WEB-INF/faces-config.xml не соответствует JSF 2.0.

  2. @ManagedBean имеет пакет javax.annotation вместо javax.faces.bean.

  3. Класс EJB не был скомпилирован / встроен в WAR /WEB-INF/classes.

  4. Бин упакован в файл JAR, в котором отсутствует /META-INF/faces-config.xml.

  5. В EL используется неверное имя управляемого компонента, оно должно быть именем класса компонента с 1-м символом в нижнем регистре в соответствии со спецификацией Javabeans. Так что в вашем конкретном примере #{fooBar} должно работать, но #{FooBar} не будет.

  6. Веб-приложение на самом деле с использованием библиотек JSF 1.x (вы можете прочитать версию JSF в журнале запуска сервера).

...