我收到以下错误: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
?有什么想法吗?
答案 0 :(得分:3)
JSF会在html <h:selectOneMenu />
中转换您的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。但是,如果您要多次重复使用此代码,则应考虑通过转换器,作为更清洁的解决方案。