По примеру PrimeFaces ShowCase , если вы присваиваете каждой вкладке идентификатор:
<p:tabView tabChangeListener="#{indexBean.onTabChange}" >
<p:tab title="tab 0" id="tab0"></p:tab>
<p:tab title="tab 1" id="tab1" ></p:tab>
<p:tab title="tab 2" id="tab2"></p:tab>
</p:tabView>
вы можете получить этот идентификатор вкладки в tabChangeListener.
public void onTabChange(TabChangeEvent event) {
System.out.println("tab id = " + event.getTab().getId());
}
Тогда вы узнаете, какая вкладка была выбрана.
Edit:
Существует открытая проблема PrimeFaces 1640 TabView: неверный activeIndex в TabChangeListener, всегда 0 для проблемы, с которой вы столкнулись.
Редактировать 2:
С PrimeFaces 5.0 и выше tabChangeListener
больше не доступен для элемента tabView
, но должен использоваться через явный тег ajax с событием tabChange.
<p:tabView id="analysisSections" value="#{analysisBean.analysis.sections}" var="section" activeIndex="#{analysisBean.activeIndex}">
<p:ajax event="tabChange" listener="#{analysisBean.onTabChange}"/>
Также вы можете напрямую получить индекс вкладки:
public void onTabChange(TabChangeEvent event) {
activeIndex = ((TabView) event.getSource()).getIndex();
}
со всеми этими изменениями activeIndex работает правильно.