Судя по нескольким поискам, это похоже на проблему, которая существует уже некоторое время. Я написал FacesConverter, который выглядит следующим образом. Объект Category — это объект 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.
Однако я тоже не могу сделать эту работу. Мой вспомогательный компонент создает и возвращает преобразователь в порядке, но он не вводит в него объект.
Я использую MyFaces CODI 1.0.1. С текущим контейнером GlassFish/Weld. Может ли кто-нибудь предложить решение, прежде чем я перекодирую, чтобы не использовать конвертер?