0

我收到以下错误:Conversion Error setting value 'home' for 'null Converter'. Home是正在显示的字符串表示形式。

对我来说,这没有意义。这是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。当 setter 被调用时,它应该得到IDir? 有任何想法吗?

4

1 回答 1

3

JSF 将您的<h:selectOneMenu />in 转换为 html select,它在纯文本中只有 value 和 label 属性。因此,您需要为此使用转换器,或者您也可以创建一个SelectItem带有 id-label 值的列表,当您收到表单时,只需重新加载IDirid。

xhtml

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

支持豆

@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;
    }
}

看看这个教程。但是,如果您要多次重用此代码,则应考虑使用转换器,作为更清洁的解决方案。

于 2013-01-11T22:20:55.250 回答