嗨,我有以下代码片段。
它背后的想法是我想要一个选择,并且根据该选择,我想在表单上呈现一些额外的字段。
因此,如果用户回答“是”,那么他应该填写其他字段。这个 a4j:support 部分是因为我想在其他字段中保留任何用户输入(ajaxSingle="false"),并且我不想更新模型并运行任何验证器,直到用户填写整个表单(immediate="true")。我只想更新一个属性“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:selectOneRadio 实现与h : selectOneMenu相同的行为?
谢谢