3

I'm using a radio component on which, when selecting an item I want to execute an action on backing bean (not navigate to an outcome page, but to perform some action and then update current page via 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...
}

我缺少的代码有什么问题吗?我已经使用相同的结构来选择许多正在工作的复选框...

4

1 回答 1

4

Rodrigo,valueChangeListener 和通过 ajax 进行的简单方法调用是有区别的。

检查 BalusC 的这个答案,valueChangeListener了解和之间的区别<f:ajax>

要解决您的问题,您可以使用listener.<p:ajax>

OneRadio 组件用于只接收一个值,如果要选择一个值列表,请使用 SelectOneMenu

尝试执行以下操作:

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

在 backbean 中,可以去掉 event 参数,因为 OneRadio 组件的值现在是一个属性,我将其命名为radioValue

String radioValue;
...
public void selectRadioItem() {
    String selectedItem = this.radioValue; 
//more...
}
于 2015-01-09T19:16:58.430 回答