динамические вкладки primefaces 5.0 не могут вызывать tabchange

#java #jsf #primefaces

#java #jsf #primefaces

Вопрос:

я использую p: TabView с поддержкой динамических вкладок и прослушивателей событий. выглядит так: .xhtml

  <h:form id="pageFm">
    <p:tabView scrollable="true"  value="#{MainBean.pagelist}" var="tab" activeIndex="#{MainBean.activeindex}" id="tabview" dynamic="true" cache="false">
    <p:ajax event="tabChange" listener="#{MainBean.onChange}" />
        <p:tab title="#{tab.pagename}" closable="true">
    <ui:include src="#{tab.pagepath}" />
    </p:tab>
</p:tabView>
</h:form>
 

ManageBean:

 public void onChange(TabChangeEvent event){
System.out.println("ok");
}
 

Когда я переключаю вкладки, этот метод не вызывается.
я не знаю почему.
может ли мне помочь?
Спасибо

Ответ №1:

Если вы используете имя класса по умолчанию для ссылки на ваш ManagedBean, то на странице просмотра вы должны установить mainBean , а не MainBean . вы установили listener="#{MainBean.onChange}" , поэтому вам нужно определить вызываемый метод public void onChange(TabChangeEvent) , который будет вызываться при изменении вкладки.

ПРИМЕЧАНИЕ: под tabChange мы подразумеваем событие выбора другой вкладки в TabView, в вашем случае кажется, что у вас есть только одна вкладка, попробуйте добавить еще одну .

Ответ №2:

Ваш слушатель Bean должен быть

 public void onChange(TabChangeEvent event){
      System.out.println("ok");
}
 

вторая проблема связана с использованием ui:include с переменной (tab), которая не должна быть доступна до фазы рендеринга, тег ui:include создается на этапе восстановления.

Комментарии:

1. я уже меняю имя слушателя компонента. но все еще не могу инвертировать