Скрытие и отображение компонентов в зависимости от значения h: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>

Код моего метода changeListenerMethod просто:

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

Что правильно и что неправильно в моем коде?


person nightcall    schedule 15.06.2015    source источник


Ответы (1)


Когда используешь

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

JSF будет искать в вашем bean-компоненте analysisOrderForm метод со следующей сигнатурой: public void changeListenerMethod(AjaxBehaviourEvent e). Так что вам просто нужно заменить ValueChangeEvent на AjaxBehaviourEvent.


Примечания:

  • Другой альтернативный подход — написать метод, который не принимает никаких аргументов, таких как public void changeListenerMethod(), и ссылается на него в вашем слушателе с помощью listener="#{analysisOrderForm.changeListenerMethod()}.
  • Событие change в вашем случае не подходит. p:selectOneRadio должно быть нажатие (кроме того, это значение события по умолчанию). См. также https://stackoverflow.com/a/21292158/2118909.
person Mathieu Castets    schedule 15.06.2015