【问题标题】:Hide and show components depending on h:selectOneRadio value根据 h:selectOneRadio 值隐藏和显示组件
【发布时间】:2015-06-15 12:26:41
【问题描述】:

我有一个带有 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>

我的“changeListenerMethod 方法”的代码就是:

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

我的代码中什么是正确的,什么是错误的?

【问题讨论】:

    标签: ajax primefaces selectoneradio


    【解决方案1】:

    使用时

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

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


    注意事项:

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

    【讨论】:

      猜你喜欢
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      • 2022-10-25
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      相关资源
      最近更新 更多