У меня создалось впечатление, что CDI не работает с классами, у которых есть @javax.faces.component.FacesComponent
. Это правда?@ Inject-ed значение null в @FacesComponent
Вот мой пример, который не работает. MyInjectableClass
используется в других точках кода, где инъекция не является проблемой, поэтому она должна быть около анкеты @FacesComponent
, я думаю.
Класс Я хочу, чтобы впрыснуть:
@Named
@Stateful
public class MyInjectableClass implements Serializable {
private static final long serialVersionUID = 4556482219775071397L;
}
компонент, который использует этот класс;
@FacesComponent(value = "mycomponents.mytag")
public class MyComponent extends UIComponentBase implements Serializable {
private static final long serialVersionUID = -5656806814384095309L;
@Inject
protected MyInjectableClass injectedInstance;
@Override
public void encodeBegin(FacesContext context) throws IOException {
/* injectedInstance is null here */
}
}
Вы действительно испытали # 2? Экземпляр компонента пользовательского интерфейса создается через JSF 'Application # createComponent()', а не через CDI. Таким образом, вам также нужна индивидуальная реализация «Application» (точно так же, как OmniFaces для этих преобразователей/валидаторов). – BalusC