4

コンパイラから受け取った奇妙なエラー:

Expected a child component type of UISelectItem/UISelectItems for component type javax.faces.SelectOne(siachoice).  Found javax.faces.component.UISelectItems.

それで、彼が UISelectItems を期待していて、UISelectItems を見つけた場合、エラーはどこにあるのでしょうか?

私のJSP実装:

<h:selectOneMenu id="siachoice" value="#{dbSelectBean.currentOption}">
                                <f:selectItems value="#{dbSelectBean.dbs}" />
                            </h:selectOneMenu>

UISelectItem を UISelectItems に設定するメソッド:

private UISelectItems populateDatabases(String databaseString) {
    UISelectItems selects = new UISelectItems();
    List<UISelectItem> result = new ArrayList<UISelectItem>();
    StringTokenizer tokeniz = new StringTokenizer(databaseString, GlobalConstants.DELIMITER);
    while(tokeniz.hasMoreTokens()){
        String tempDB = tokeniz.nextToken();
        UISelectItem item = new UISelectItem();
        item.setItemValue(tempDB);
        item.setItemLabel(tempDB);
        result.add(item);
    }
    selects.setValue(result);

    return selects;
}

次に、もちろん、Bean 変数 dbs に設定しています。

ヘルプ?

4

4 に答える 4

4

は、次の<f:selectItems value="#{bean.items}" />いずれかの値を期待します。

public SelectItem[] getItems() {}

public List<SelectItem> getItems() {}

public Map<String, Object> getItems() {}

一般的に使用されるものは確かにList<SelectItem>です。

編集:コメントへの応答として:コンポーネントUISelectItemを表し<f:selectItem>ます。UISelectItems同じことがとにも当てはまります<f:selectItems>。例えば

<f:selectItem binding="#{bean.selectItem}" />
<f:selectItems binding="#{bean.selectItems}" />

としてバインドされています

private UISelectItem selectItem;
private UISelectItems selectItems;
// +getter +setter

このようにして、他のすべてのコンポーネントと同様に、プログラムでコンポーネントを制御できますUIComponent

于 2009-11-13T11:34:41.640 に答える
4

あなたはのを返す必要がありCollectionますjavax.faces.model.SelectItem

リストリスト=newArrayList();
list.add(new SelectItem(value、label));

リターンリスト;

于 2009-11-13T09:33:46.500 に答える
0

問題は、UISelectItemがコンポーネントクラスであるため、binding属性ごとにjsfタグとペアにする必要があることです。純粋な値が必要な場合は、SelectItem(s)クラスを使用する必要があります

于 2009-11-13T09:32:36.007 に答える