0

嗨,我有以下代码片段。

它背后的想法是我想要一个选择,并且根据该选择,我想在表单上呈现一些额外的字段。

因此,如果用户回答“是”,那么他应该填写其他字段。这个 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相同的行为?

谢谢

4

1 回答 1

3

onchange事件是侦听一组单选按钮或复选框中更改的错误事件。它们基本上存在多个输入元素,而不仅仅是一个。你需要onclick

于 2012-10-14T11:36:37.277 回答