3

ラジオボタン リストがあり、バッキング Bean メソッドの結果に従っていくつかの項目を無効にしたいと考えています。

<h:selectOneRadio value="#{managedBean.selectedItem}">
    <f:selectItems value="#{managedBean.selectItems}"
                   var="x"  
                   itemDisabled="#{managedBean.checkIncompatible(x)}" />
</h:selectOneRadio> 

これは正しい方法ですか?つまり、このコードはリストからcheckIncompatible(x)それぞれを呼び出し、その項目を有効/無効に設定するか、それとも一度だけ設定しますか?xselectItems

すべてのボタンを有効または無効にすることができただけで、メソッドが一度しか呼び出されないのではないかと疑っています。または、私のコードの残りの部分は、私が信じたいほど完璧ではありません。そして、それを修正するには、はるかに長い質問が必要になります。

4

1 に答える 1

2

次のビューでは、Mojarra 2.1.4 で問題を再現できません。

<h:selectOneRadio value="#{bean.item}">
    <f:selectItems value="#{bean.items}" var="item" 
        itemDisabled="#{bean.isDisabled(item)}" />
</h:selectOneRadio>

および次の Bean:

private String[] items = { "one", "two", "three" }; // +getter
private String item; // +getter+setter

public boolean isDisabled(String item) {
    return "two".equals(item);
}

上記の例は item を正しく無効にしますtwo

したがって、おそらくcheckUncompatible()メソッドのバグが原因で、問題が他の場所で発生しています。メソッドのブレークポイントは、各アイテムに対して確実に呼び出されることを教えてくれます。

于 2011-11-24T13:39:32.947 に答える