PrimeFaces ShowCaseの例では、各タブに id を指定すると、次のようになります。
<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>
そのタブ ID は、tabChangeListener で取得できます。
public void onTabChange(TabChangeEvent event) {
System.out.println("tab id = " + event.getTab().getId());
}
次に、どのタブが選択されたかがわかります。
編集:
未解決の PrimeFaces問題 1640 TabView: Wrong activeIndex in 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 は適切に機能します。