我正在使用一个无线电组件,在选择一个项目时,我想对支持bean执行操作(不导航到结果页面,而是执行某些操作,然后通过Ajax更新当前页面)。问题是我无法获得支持bean值更改侦听器操作来执行
<h:form id="one-radio">
<p:selectOneRadio layout="grid"
valueChangeListener="#{myBean.selectRadioItem}" >
<p:ajax process="@this" update="@form" />
<f:selectItems value="#{myBean.radioOptions}" var="radio"
itemLabel="#{radio.name}" itemValue="#{radio.id}" >
</f:selectItems>
</p:selectOneRadio>
</h:form>
和支持bean方法......
public void selectRadioItem(ValueChangeEvent event) {
String[] selectedItems = (String[]) event.getNewValue();
//more...
}
我错过的代码中有什么问题吗?我已经使用相同的结构来选择多个复选框,它正在工作......
答案 0 :(得分:3)
Rodrigo,valueChangeListener与通过ajax进行的简单方法调用之间存在差异。
Check this answer by BalusC关于valueChangeListener
和<f:ajax>
要解决您的问题,您可以使用listener
的{{1}}属性。
OneRadio组件仅用于接收一个值,如果要选择值列表,请使用SelectOneMenu
尝试执行以下操作:
<p:ajax>
在backbean中,您可以删除event参数,因为OneRadio组件的值现在是一个属性,我将其命名为<p:selectOneRadio layout="grid" value="#{myBean.radioValue}">
<p:ajax process="@this" update="@form" listener="#{myBean.selectRadioItem}"/>
<f:selectItems value="#{myBean.radioOptions}" var="radio"
itemLabel="#{radio.name}" itemValue="#{radio.id}" >
</f:selectItems>
</p:selectOneRadio>
radioValue