Скрыть и показать компоненты в зависимости от значения h:selectOneRadio

У меня есть страница с a 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());
 }

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

1 ответ

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

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

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


Заметки:

  • Другой альтернативный подход - написать метод, который не принимает никаких аргументов, таких как public void changeListenerMethod() и ссылки на это в вашем слушателе с listener="#{analysisOrderForm.changeListenerMethod()}
  • Изменение события не является правильным событием в вашем случае. p:selectOneRadio событие должно быть щелчком (кроме того, это значение события по умолчанию). Смотрите также /questions/2463293/pselectoneradio-ne-obnovlyaet-model-v-sobyitii-izmenenie-s-pomoschyu-pajax/2463303#2463303
Другие вопросы по тегам