[英]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.