5

p:selectOneMenuを追加するときの選択に問題がありf:selectItemます。

意見:

<p:selectOneMenu value="#{selectionTest.selectedName}">
    <f:selectItem itemLabel="Select" noSelectionOption="true" />
    <f:selectItems value="#{selectionTest.allNames}" var="varName" itemLabel="#{varName}" itemValue="#{varName}" />
</p:selectOneMenu>

モデル:

private List<String> allNames;
private String selectedName;

public MenuSelectionTestBean(){
    allNames = new ArrayList<String>();
    allNames.add("Ahmed");
    allNames.add("Mohamed");
    allNames.add("Ibrahim");
    allNames.add("Walid");

    selectedName ="Walid";
}

結果:

ここに画像の説明を入力してください

アイテム「Walid」を選択する必要がありますが、代わりに「Ibrahim」が選択されます。PrimeFacesは、アイテムの値ではなく、リスト内のインデックスに基づいてアイテムを選択すると思います。

これはどのように発生し、どうすれば解決できますか?

4

1 に答える 1

7

問題を再現できました。PrimeFaces のソース コードを調べました。これは PrimeFaces のバグでSelectOneMenuRendererあり、アイテムが使用された場合にのみ公開noSelectionOption="true"されます。<option>レンダラーはそのバッキング要素の HTML 要素を生成しませんが、そのためのビジュアルリストの<select>を生成します。つまり、ケースには 4 つのアイテムと5 つのアイテムが含まれています。は、ご想像のとおり、のインデックスに基づいて JavaScript によって選択されます。それはあなたの問題を説明しています。<li><ul><select><ul><li><option selected>

あなたの最善の策は、それをバグとして PrimeFaces の人に報告することです。レンダラーもその<option>ために を生成するか、JavaScript がインデックスではなく値に基づいてオプションを選択する必要があります。

その間、noSelectionOption="true"byを置き換えるitemValue="#{null}"itemValue=""、JSF が送信された空の文字列の値を として解釈するように構成されている場合はnull、問題を解決する必要があります。

于 2013-01-02T00:32:40.310 に答える