Из нескольких поисков это похоже на проблему, которая была вокруг некоторое время. Я написал FacesConverter, который выглядит следующим образом. Объект Категория является объектом JPA, а CategoryControl - это DAO, который его извлекает.
@FacesConverter(value = "categoryConverter")
public class CategoryConverter implements Converter {
@Inject private CategoryControl cc;
public CategoryConverter() { }
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (cc != null) return cc.getByName(value);
System.out.println("CategoryConverter().getAsObject(): no injection!");
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (!(value instanceof Category)) return null;
return ((Category) value).getName();
}
}
Как вы, наверное, догадались, я никогда не получаю инъекцию. Я получил это решение из этой страницы, которая выглядит следующим образом:
Workaround for this problem: create this method in your localeController:
public Converter getConverter()
{
return FacesContext.getCurrentInstance().getApplication().createConverter("localeConverter");
}
and use converter="#{localeController.converter}" in your h:selectOneMenu.
Однако я не могу выполнить эту работу. Моя поддержка bean создает и возвращает конвертер в порядке, но он не получает объект, введенный в него.
Я использую MyFaces CODI 1.0.1. С текущим контейнером GlassFish/Weld. Может ли кто-нибудь предложить решение до того, как я перекодирую, чтобы не использовать конвертер?