0

ラジオボタンを使用して行を選択するテーブルがあります。ラジオボタンがクリックされると、ajax はいくつかのコードを実行して別のフィールドを更新し、フォームをレンダリングします。ラジオの選択が消え、すべてのラジオボタンが選択されていないことを除いて、すべて正常に動作します。なぜこれが起こっているのかわかりませんか?ボタンがクリックされたため、値は変更されません。そして、それはonchange JavaScriptではありません。テストとしてそれを削除しましたが、それでも同じ問題が発生します。以下のコードとは別のものであるため、更新されたフィールドをレンダリングすることもできません。サーブレット例外 - 不明な ID エラーが発生します (誰かがそれを回避する方法を教えてくれるかもしれません)。

<h:dataTable id="addClient" styleClass="dataTable"
    value="#{AddEntryMB.clientValues}" var="c" binding="#{AddEntryMB.dataTable}" 
                rendered="#{AddEntryMB.renderClientTable}">
    <f:facet name="header" >
                Select Client to Associate with Appointment
            </f:facet>

    <h:column>
        <f:facet name="header">Select</f:facet>

                <h:selectOneRadio valueChangeListener="#{AddEntryMB.setSelectedItem}" 
                    immediate="true" onchange="dataTableSelectOneRadio(this);" >
                        <f:selectItem itemValue="null" />
                        <f:ajax event="click" render="@form"/>
                </h:selectOneRadio>
    </h:column>
4

2 に答える 2

0

選択した値がバッキング Bean に保存されていないようです。

最初に、 h:selectOneRadio コンポーネントをバッキング Bean 値にバインドする必要があります。

<h:selectOneRadio valueChangeListener="#{AddEntryMB.setSelectedItem}" value=#{c.radioValue} immediate="true" onchange="dataTableSelectOneRadio(this);" >

次に、次のように ajax 内で dataTable を処理してみてください。

<f:ajax event="click" render="@form" execute="addClient"/>

また、何が選択されているかを確認するために、 itemLabelbesideも追加します。itemValue

<f:selectItem itemValue="null" itemLabel="NULL"/>

于 2012-10-05T21:27:48.007 に答える
0

モデル値に値が設定されておらず、フォームがajaxによって更新されるため、選択が解除されます。値をモデルにバインドすることで、選択解除を防ぐことができます。

<h:selectOneRadio ... value="#{AddEntryMB.selected[c.id]}">

private Map<Long, Boolean> selected = new HashMap<Long, Boolean>(); // +getter

この例では、 で表される型が一意の ID を表すプロパティを#{c}持っていると仮定しています。private Long id

于 2012-10-07T01:15:34.807 に答える