2015-01-09 60 views
3

我正在使用一个无线电组件,当选择一个项目时,我想对辅助bean执行操作(不导航到结果页面,而是执行一些操作,然后更新当前页面通过Ajax)。问题是我不能得到支持bean值变化监听行动执行在p上执行备份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... 
} 

是有什么错我缺少其中的代码?我使用了相同的结构来选择许多正在工作的复选框...

+0

http://stackoverflow.com/q/14956261/1391249,HTTP:// stackover flow.com/q/9180938/1391249 – Tiny 2015-01-09 19:19:30

+0

这是什么意思,“*但执行一些操作,然后通过Ajax *更新当前页面”顺便说一下?更新**当前页面**(通过AJAX)引用类似于同步请求的内容。 – Tiny 2015-01-09 19:23:29

+0

http://stackoverflow.com/q/11879138/1391249 – Tiny 2015-01-09 19:27:54

回答

3

Rodrigo,valueChangeListener和通过ajax的简单方法调用之间存在差异。

Check this answer by BalusCvalueChangeListener<f:ajax>

之间的差别来解决你的问题,你可以使用的<p:ajax>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,你可以删除事件参数,因为OneRadio组件的值现在是一个属性,我命名为radioValue

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