從幾次搜索中,這似乎就像是一個已經存在一段時間的問題。我寫了一個如下所示的FacesConverter。對象類別是JPA實體,並且類別控制是提取它的DAO。將CDI注入FacesConverter
@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();
}
}
正如您現在可能猜到的那樣,我從來沒有注射過。我得到這個解決方法從this page,它看起來像這樣。:
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容器。任何人都可以在我重新編碼不使用轉換器之前提出解決方案嗎?
嗯,我會被淹沒。我實現了一個基本上調用應用程序來評估轉換器內部表達式的解決方法,但我認爲這更優雅。所以我有另一個問題@BalusC - 是不是你寫了一本關於JSF的書的時間? – AlanObject
不客氣。至於這本書,你到目前爲止不是第一個問這個問題的人...... – BalusC
好吧,它不像你必須寫很多 - 只是編輯你已經寫的所有東西。說真的,如果你對一個合作感興趣的話,我已經想到了一本書的大綱,只是讓我知道。 – AlanObject