JSF 1.2:带有a4j的selectOneRadio:支持不按预期工作

时间:2012-10-11 12:51:13

标签: jsf jsf-1.2 ajax4jsf

您好我有以下代码段。

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

因此,如果用户回答“是”,那么他应填写其他字段。 这个a4j:支持部分是因为我想在其他字段中保留任何用户输入(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}都会更新,表单会被重新呈现,其他字段会显示/消失。

问题:

我想将poplist(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 是否有任何简单的方法可以实现相同的行为?

由于

1 个答案:

答案 0 :(得分:3)

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