primefaces tabView activeIndex问题

Rob*_*tis 7 indexing jsf primefaces tabview

我有两个Tab的Primefaces TabView:

<p:tabView dynamic="true" cache="false"
           onTabShow="scrollBottom(#{stanzaBean.activeIndex})"
           tabChangeListener="#{messaggioBean.onTabChange}"
           activeIndex="#{stanzaBean.activeIndex}" >
Run Code Online (Sandbox Code Playgroud)

它工作正常,但是当我更改Tab时,activeIndex不会在服务器上更新,它总是返回默认值.我正在使用primefaces 2.2.1.

谢谢.

Mar*_*ark 11

通过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>
Run Code Online (Sandbox Code Playgroud)

您可以在tabChangeListener中获取该选项卡ID.

public void onTabChange(TabChangeEvent event) {       
    System.out.println("tab id = " + event.getTab().getId());
}
Run Code Online (Sandbox Code Playgroud)

然后你就会知道选择了哪个标签.


编辑:

有一个开放的PrimeFaces 问题1640 TabView:TabChangeListener中的activeIndex错误,对你遇到的问题总是0.


编辑2:

使用PrimeFaces 5.0及更高tabChangeListener版本时,tabView元素上不再可用,但应通过带有tabChange事件的显式ajax标记使用.

 <p:tabView id="analysisSections" value="#{analysisBean.analysis.sections}" var="section" activeIndex="#{analysisBean.activeIndex}">
      <p:ajax event="tabChange" listener="#{analysisBean.onTabChange}"/>
Run Code Online (Sandbox Code Playgroud)

您也可以直接获取选项卡的索引:

public void onTabChange(TabChangeEvent event) {
    activeIndex = ((TabView) event.getSource()).getIndex();
}
Run Code Online (Sandbox Code Playgroud)

通过所有这些更改,activeIndex正常工作.

  • 我使用(((TabView)event.getSource())。getIndex()`得到了索引-1。 (2认同)

小智 6

这为我工作:

public void onTabChange(TabChangeEvent event) {
        Tab activeTab = event.getTab();
        tabPanelIndex = ((TabView)event.getSource()).getChildren().indexOf(activeTab);
    }
Run Code Online (Sandbox Code Playgroud)