Выполнить действие Backing Bean на p: selectOneRadio

Я использую радиокомпонент, на котором при выборе элемента я хочу выполнить действие на резервном компоненте (не переходить на страницу результата, а выполнять какое-то действие, а затем обновлять текущую страницу через Ajax). Проблема в том, что я не могу выполнить действие слушателя изменения значения резервного компонента.

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

и метод подложки...

public void selectRadioItem(ValueChangeEvent event) {
    String[] selectedItems = (String[]) event.getNewValue();
    //more...
}

что-то не так в коде, который мне не хватает? Я использовал эту же структуру для выбора многих флажков, которые работают...


person Rodrigo Martinez    schedule 09.01.2015    source источник
comment
stackoverflow.com/q/14956261/1391249, stackoverflow.com/q/9180938/1391249   -  person Tiny    schedule 09.01.2015
comment
Что это значит, как не выполнить какое-то действие, а затем обновить текущую страницу через Ajax кстати? Вместо этого обновление текущей страницы (через AJAX) относится к чему-то вроде синхронного запроса.   -  person Tiny    schedule 09.01.2015
comment
stackoverflow.com/q/11879138/1391249   -  person Tiny    schedule 09.01.2015


Ответы (1)


Родриго, есть разница между 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 можно удалить параметр события, потому что значение компонента OneRadio теперь является свойством, которое я назвал radioValue

String radioValue;
...
public void selectRadioItem() {
    String selectedItem = this.radioValue; 
//more...
}
person Pellizon    schedule 09.01.2015