Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF转换器_Java_Jsf_Jakarta Ee_Jsf 2_Managed Bean - Fatal编程技术网

Java JSF转换器

Java JSF转换器,java,jsf,jakarta-ee,jsf-2,managed-bean,Java,Jsf,Jakarta Ee,Jsf 2,Managed Bean,我收到以下错误:转换错误为“空转换器”设置值“home”。home是显示内容的字符串表示形式 对我来说,这毫无意义。以下是JSF代码: <h:selectOneMenu value="#{createResourceDialogController.selectedDir}"> <f:selectItems value="#{createResourceDialogController.dirs}" /> </h:selectOneMenu> 下

我收到以下错误:
转换错误为“空转换器”设置值“home”。
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;
}
publicmap getDirs()
{
Map retVal=new LinkedHashMap();
列出目录;
if(isCompanyResource)
{
dirs=convertToIDir(getCompanyDir());
}
其他的
{
dirs=convertToIDir(getUserDir());
}
用于(IDir IDir:dirs)
{
retVal.put(iDir.getDir(),iDir);
}
返回返回;
}
公共IDir getSelectedDir()
{
返回selectedDir;
}
公共无效设置选定的DIR(IDir选定的DIR)
{
this.selectedDir=selectedDir;
}
对我来说,似乎所有类型都匹配,而且转换器甚至不是必需的。
getDirs()
返回一个值为
IDir
的映射。调用setter时,它应该获取
IDir
?有什么想法吗?

JSF将您的
转换为html
select
,它只有纯文本中的值和标签属性。因此,您需要使用转换器,或者您也可以创建一个带有id标签值的
SelectItem
列表,当您收到表单时,只需重新加载带有id的
IDir

xhtml


支持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;
    }
}
@ManagedBean
@视域
公共类CreateResourceDialogController{
私人名单选择;
私有字符串selectedDirId;
私有void initBean(){
选项=新的ArrayList();
SelectItem item1=新建SelectItem(dir.getId.toString(),dir.getName());
增加(第1项);
}
公共列表getOptions(){
返回选项;
}
public void setSelectedDirId(字符串dirId){
selectedDirId=dirId;
}
公共字符串getSelectedDirId(){
返回selectedDirId;
}
}
看看这个。但是,如果你想重复使用这个代码,你应该考虑通过转换器,作为一个更干净的解决方案。

JSF在HTML代码中转换你的<代码> <代码> >选择< /代码>,它只在纯文本中有值和标签属性。因此,您需要使用转换器,或者您也可以创建一个带有id标签值的

SelectItem
列表,当您收到表单时,只需重新加载带有id的
IDir

xhtml


支持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;
    }
}
@ManagedBean
@视域
公共类CreateResourceDialogController{
私人名单选择;
私有字符串selectedDirId;
私有void initBean(){
选项=新的ArrayList();
SelectItem item1=新建SelectItem(dir.getId.toString(),dir.getName());
增加(第1项);
}
公共列表getOptions(){
返回选项;
}
public void setSelectedDirId(字符串dirId){
selectedDirId=dirId;
}
公共字符串getSelectedDirId(){
返回selectedDirId;
}
}

看看这个。但是,如果你想重复使用这个代码,你应该考虑通过转换器,作为一个更干净的解决方案。这对我来说很有意义。非常感谢!这对我来说是有道理的。