2013-01-11 67 views
0

我收到以下錯誤信息:Conversion Error setting value 'home' for 'null Converter'.Home是正在顯示的內容的字符串表示形式。JSF轉換器

對我來說,這沒有任何意義。下面是JSF代碼:

<h:selectOneMenu value="#{createResourceDialogController.selectedDir}"> 
    <f:selectItems value="#{createResourceDialogController.dirs}" /> 
</h:selectOneMenu> 

這裏是ManagedBean代碼:

public Map<String,IDir> getDirs() 
{ 
    Map<String,IDir> retVal = new LinkedHashMap<String, IDir>(); 
    List<IDir> dirs; 
    if(isCompanyResource) 
    { 
     dirs = convertToIDir(getCompanyDir()); 
    } 
    else 
    { 
     dirs = convertToIDir(getUserDir()); 
    } 
    for(IDir iDir : dirs) 
    { 
     retVal.put(iDir.getDir(),iDir); 
    } 
    return retVal; 
} 

public IDir getSelectedDir() 
{ 
    return selectedDir; 
} 

public void setSelectedDir(IDir selectedDir) 
{ 
    this.selectedDir = selectedDir; 
} 

對我來說,似乎所有的類型匹配起來,並且轉換器甚至是不必要的。 getDirs()返回值爲IDir的地圖。當接球員被叫時,應該是IDir?有任何想法嗎?

回答

3

JSF會將您的<h:selectOneMenu />轉換爲html select,它只有純文本的值和標籤屬性。所以你需要使用一個轉換器,或者你也可以創建一個帶有id標籤值的SelectItem列表,並且當你收到表單時,只需使用id重新加載IDir

XHTML

<h:selectOneMenu value="#{createResourceDialogController.selectedDirId}"> 
    <f:selectItems value="#{createResourceDialogController.options}" /> 
</h:selectOneMenu> 

輔助Bean

@ManagedBean 
@ViewScoped 
public class CreateResourceDialogController { 

    private List<SelectItem> options; 

    private String selectedDirId; 

    private void initBean(){ 
     options = new ArrayList<SelectItem>(); 
     SelectItem item1 = new SelectItem(dir.getId.toString(), dir.getName()); 
     options.add(item1); 
    } 

    public List<SelectItem> getOptions(){ 
     return options; 
    } 

    public void setSelectedDirId(String dirId){ 
     selectedDirId = dirId; 
    } 

    public String getSelectedDirId(){ 
     return selectedDirId; 
    } 
} 

看看這個tutorial。但是,如果您要多次重複使用此代碼,則應考慮使用轉換器,作爲更乾淨的解決方案。

+0

非常感謝!這對我來說很有意義。 – user489041