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