【问题标题】:Convertors for JSFJSF 转换器
【发布时间】:2012-12-26 13:53:25
【问题描述】:

我收到以下错误: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?有什么想法吗?

【问题讨论】:

    标签: java jsf jakarta-ee jsf-2 managed-bean


    【解决方案1】:

    JSF 将您的 &lt;h:selectOneMenu /&gt; 转换为 html select,它在纯文本中只有 value 和 label 属性。因此,您需要为此使用转换器,或者您也可以创建一个带有 id-label 值的 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。但是,如果您要多次重用此代码,则应考虑使用转换器,作为更清洁的解决方案。

    【讨论】:

    • 非常感谢!这对我来说很有意义。
    猜你喜欢
    • 1970-01-01
    • 2011-11-29
    • 2018-12-24
    • 2013-04-30
    • 2011-01-06
    • 2011-07-05
    • 1970-01-01
    • 2011-06-06
    • 2012-03-15
    相关资源
    最近更新 更多