#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. я уже меняю имя слушателя компонента. но все еще не могу инвертировать