【问题标题】:Execute Backing Bean Action on p:selectOneRadio在 p:selectOneRadio 上执行支持 Bean 操作
【发布时间】:2015-03-08 03:50:08
【问题描述】:

我正在使用无线电组件,在其中选择我想要在备份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...
}

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

【问题讨论】:

标签: ajax jsf primefaces selectoneradio


【解决方案1】:

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

Check this answer by BalusC关于valueChangeListener&lt;f:ajax&gt;的区别

要解决您的问题,您可以使用&lt;p:ajax&gt;listener 属性。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-18
    • 2022-08-15
    • 2023-03-29
    • 2016-07-07
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多