2
<h:form>
    <h:messages />
        <h:selectOneRadio value="#{bean.selectedValue}" id="selectId"
            layout="pageDirection">
            <f:selectItems value="#{bean.values}" var="value"
                itemLabel="#{value.text}" itemValue="{value}" />
        </h:selectOneRadio>
        <h:commandButton value="Press Me" >
            <f:ajax listener="#{bean.btn_action}" execute="@form"/>
        </h:commandButton>
</h:form>

以下はコードの詳細です。

  • Bean は @ViewScope のバッキング Bean です。
  • bean.values は、@RequestScope にある別のマネージド Bean のリストです。
  • ラジオボタンの値は、バッキング Bean の @RequestScope マネージド Bean の上にバインドされます。#{bean.selectedValue}
  • selectedValue は、getter/setter を持つバッキング Bean 内のオブジェクトへの参照です。

問題。- ajax タグに execute=@form を追加すると、リスナーも呼び出されません。- execute-@form の後、リスナーが呼び出されますが、バッキング Bean でラジオ ボタンの選択値が更新されません。 - 私がデバッグするとき、getter は常に selectedValue に対して呼び出され、setter は呼び出されません。

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

3

itemValue="{value}"これが単なる不注意なタイプミスであり、サーバー ログに注意を払わなかったと仮定すると#{value}、非標準の型を表し、Converterその型の が存在しないか、型のequals()メソッドを適切に実装していない場合、この構成は黙って失敗します。 .

最初のステップは に追加render="@form"すること<f:ajax>で、それも<h:messages>更新されるため、変換/検証エラーについてサーバー ログを調べる必要はありません。

<f:ajax execute="@form" listener="#{bean.btn_action}" render="@form" />

2 番目のステップは、表示された変換/検証エラーに基づいて問題を修正することです。ほとんどの場合、「null コンバーター」という変換エラーが発生したか、既に変換エラーが発生している可能性がありますが、代わりに「値が無効です」という検証エラーが発生しています。

両方の潜在的な問題は、次の回答で詳細に回答されています。

于 2012-11-28T12:29:37.217 に答える