根据h:selectOneRadio值隐藏和显示组件

时间:2015-06-15 12:26:41

标签: ajax primefaces selectoneradio

我有一个带有p:selectOneRadio的页面,我想显示一个数据表,具体取决于所选的无线电选择值。我有错误:

  

GRAVE:javax.el.MethodNotFoundException:....... changeListenerMethod(javax.faces.event.AjaxBehaviourEvent)

我的代码如下:

<p:selectOneRadio value="#{analysisOrderForm.selectedOrderDomain}">
     <f:selectItem itemLabel="choice1" itemValue="choice1"></f:selectItem>         
     <f:selectItem itemLabel="choice2" itemValue="choice2"></f:selectItem>
     <p:ajax event="change" listener="#{analysisOrderForm.changeListenerMethod}"/>
 </p:selectOneRadio>
 <h:PanelGroup>
    <p:dataTable rendered="#{analysisOrderForm.selectedOrderDomain == 'choice1'}">....</p:dataTable>
    <p:dataTable rendered="#{analysisOrderForm.selectedOrderDomain == 'choice2'}">....</p:dataTable>
 </h:PanelGroup>

我的&#39; changeListenerMethod方法的代码&#39;只是:

 public void changeListenerMethod(ValueChangeEvent e){
      setSelectedOrderDomain(e.getValue().toString());
 }

我的代码中有什么错误和错误?

1 个答案:

答案 0 :(得分:0)

使用时

<p:ajax event="change" listener="#{analysisOrderForm.changeListenerMethod}"/>

JSF将在analysisOrderForm bean中查找具有以下签名的方法:public void changeListenerMethod(AjaxBehaviourEvent e)。因此,您只需要将ValueChangeEvent替换为AjaxBehaviourEvent

注意:

  • 另一种替代方法是编写一个不接受任何参数的方法,例如public void changeListenerMethod(),并使用listener="#{analysisOrderForm.changeListenerMethod()}
  • 在您的监听器中引用它
  • 事件更改不适合您的情况。 p:selectOneRadio事件应点击(此外,这是默认事件值)。另请参阅https://stackoverflow.com/a/21292158/2118909