简体   繁体   English

JSF 1.2:带有a4j:support的selectOneRadio无法按预期工作

[英]JSF 1.2: selectOneRadio with a4j:support doesn`t work as expected

Hi I have the following code snippet. 嗨,我有以下代码片段。

The idea behind it is that I want to have a choise and depending on that choise I want to render some additional fields on the form. 其背后的想法是,我想要一个选择框,并根据该选择框在表单上呈现一些其他字段。

So if user answer "Yes" then he should fill additional fields. 因此,如果用户回答“是”,那么他应该填写其他字段。 This a4j:support part is because I want to keep any user input in other fields (ajaxSingle="false") and I don`t want to update model and run any validators until user fills whole form (immediate="true"). 这个a4j:support部分是因为我想在其他字段中保留任何用户输入(ajaxSingle =“ false”),并且我不想更新模型并运行任何验证程序,直到用户填写整个表单(immediate =“ true”)。 I only want to update one property "bean.answer" (a4j:actionparam) because it controls visible form components. 我只想更新一个属性“ 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>

The above code works as I want. 上面的代码按我的要求工作。 Every time i change my answer, the bean value #{bean.answer} is updated, form is rerendered and additional fields appear/disappear. 每次更改答案时,bean值#{bean.answer}都会更新,表单会重新呈现,并且其他字段会显示/消失。

The problem: 问题:

I want to change poplist (selectOneMenu) to radio butons (selectOneRadio). 我想将弹出列表(selectOneMenu)更改为单选按钮(selectOneRadio)。 So in my new code I simply changed h:selectOneMenu to h: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>

But this code doesn`t work. 但是这段代码不起作用。 Every time i change my answer, the bean value #{bean.answer} is updated with the same "false" value and additional fields never appear. 每次更改答案时,bean值#{bean.answer}都会更新为相同的“ false”值,并且永远不会出现其他字段。

Is there any simple way to achieve the same behaviour with h:selectOneRadio as with h:selectOneMenu ? 是否有任何简单的方法可以通过h:selectOneRadio达到与h:selectOneMenu相同的行为?

Thanks 谢谢

The onchange event is the wrong event to listen on a change within a group of radio buttons or check boxes. onchange事件是侦听一组单选按钮或复选框中的更改的错误事件。 They exist basically of multiple input elements instead of only one. 它们基本上存在多个输入元素,而不只是一个。 You need onclick instead. 您需要onclick代替。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM