Судя по нескольким поискам, это похоже на проблему, которая существует уже некоторое время. Я написал 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. Может ли кто-нибудь предложить решение, прежде чем я перекодирую код, чтобы не использовать конвертер?