0

こんにちは、次のコード スニペットがあります。

その背後にあるアイデアは、選択肢が必要であり、その選択肢に応じて、フォームにいくつかの追加フィールドをレンダリングしたいということです。

したがって、ユーザーが「はい」と答えた場合、追加のフィールドに入力する必要があります。この a4j:support 部分は、ユーザー入力を他のフィールド (ajaxSingle="false") に保持し、ユーザーがフォーム全体に入力するまで (immediate="true") モデルを更新してバリデーターを実行したくないためです。1 つのプロパティ「bean.answer」(a4j:actionparam) のみを更新したいのは、それが表示されるフォーム コンポーネントを制御するためです。

<h:form id="form">
    ...

    <h:selectOneMenu id="question"
                     value="#{bean.answer}" 
                     required="true">
        <f:selectItem itemLabel="No"  itemValue="false" />
        <f:selectItem itemLabel="Yes" itemValue="true" />
        <a4j:support event="onchange"
                     ajaxSingle="false"
                     immediate="true"
                     reRender="form">
            <a4j:actionparam name="question" 
                             value="$('form:question').value" 
                             assignTo="#{bean.answer}" 
                             noEscape="true"/>
            </a4j:support>
    </h:selectOneMenu>

...

    <h:outputText value="Additional field" 
                  styleClass="boldedFont" 
                  rendered="#{bean.answer}"/>
    <h:inputText  id="fieldId"
                  value="#{bean.additionalFieldValue}"
                  required="true"
                  rendered="#{bean.answer}"/>
...

</h:form>

上記のコードは、私が望むように動作します。回答を変更するたびに、Bean 値 #{bean.answer} が更新され、フォームが再レンダリングされ、追加のフィールドが表示/非表示になります。

問題:

ポップリスト (selectOneMenu) をラジオ ボタン (selectOneRadio) に変更したい。したがって、新しいコードでは、単にh:selectOneMenuh: selectOneRadio に変更しました。

<h:form id="form">
    ...

    <h:selectOneRadio id="question"
                     value="#{bean.answer}" 
                     required="true">
        <f:selectItem itemLabel="No"  itemValue="false" />
        <f:selectItem itemLabel="Yes" itemValue="true" />
        <a4j:support event="onchange"
                     ajaxSingle="false"
                     immediate="true"
                     reRender="form">
            <a4j:actionparam name="question" 
                             value="$('form:question').value" 
                             assignTo="#{bean.answer}" 
                             noEscape="true"/>
            </a4j:support>
    </h:selectOneRadio>

...

    <h:outputText value="Additional field" 
                  styleClass="boldedFont" 
                  rendered="#{bean.answer}"/>
    <h:inputText  id="fieldId"
                  value="#{bean.additionalFieldValue}"
                  required="true"
                  rendered="#{bean.answer}"/>
...

</h:form>

しかし、このコードは機能しません。回答を変更するたびに、Bean 値 #{bean.answer} が同じ「false」値で更新され、追加のフィールドが表示されません。

h:selectOneMenuと同じ動作を h:selectOneRadio で実現する簡単な方法はあります?

ありがとう

4

1 に答える 1

3

イベントは、ラジオボタンまたはチェックボックスのグループ内の変更をリッスンするのに間違ったonchangeイベントです。それらは基本的に、1つだけではなく、複数の入力要素で構成されます。onclick代わりに必要です。

于 2012-10-14T11:36:37.277 に答える