Изпълнете Backing Bean действие на p:selectOneRadio

Използвам радио компонент, на който, когато избирам елемент, искам да изпълня действие върху backing 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>

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

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