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()、値が であるマップを返しますIDirIDirセッターが呼び出されると、 ?を取得する必要があります。何か案は?

4

1 に答える 1

3

JSFは、プレーン テキストの value 属性と label 属性のみを持つ<h:selectOneMenu />htmlに変換します。selectしたがって、そのためにコンバーターを使用する必要があります。または、SelectItemid-label 値を含むリストを作成し、フォームを受け取ったら、id をリロードするだけIDirです。

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 に答える