在p:selectOneRadio上执行Backing Bean Action

时间:2015-01-09 18:40:04

标签: ajax jsf primefaces selectoneradio

我正在使用一个无线电组件,在选择一个项目时,我想对支持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...
}

我错过的代码中有什么问题吗?我已经使用相同的结构来选择多个复选框,它正在工作......

1 个答案:

答案 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