こんにちは、次のコード スニペットがあります。
その背後にあるアイデアは、選択肢が必要であり、その選択肢に応じて、フォームにいくつかの追加フィールドをレンダリングしたいということです。
したがって、ユーザーが「はい」と答えた場合、追加のフィールドに入力する必要があります。この 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:selectOneMenuをh: 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 で実現する簡単な方法はありますか?
ありがとう