primefaces tabView activeIndex问题

时间:2011-03-07 17:19:02

标签: jsf indexing primefaces tabview

我有两个Tab的Primefaces TabView,如:

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

它工作正常,但是当我更改Tab时,在服务器上不更新activeIndex并且它始终返回默认值。 我正在使用primefaces 2.2.1。

谢谢。

3 个答案:

答案 0 :(得分:11)

PrimeFaces ShowCase example,如果您为每个标签指定了一个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>

您可以在tabChangeListener中获取该标签ID。

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

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


编辑:

您遇到的问题有一个开放的PrimeFaces issue 1640 TabView: Wrong activeIndex in TabChangeListener, always 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}"/>

您也可以直接获取标签索引:

public void onTabChange(TabChangeEvent event) {
    activeIndex = ((TabView) event.getSource()).getIndex();
}

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

答案 1 :(得分:5)

这对我有用:

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

答案 2 :(得分:1)

尽管问题与PrimeFaces 2.2.1有关,但我想提及的是,在现代PrimeFaces版本(已通过6.2版进行测试)中,当属性dynamic设置为{{ 1}}和true设置为cache。通过使用此属性组合,选择另一个选项卡后,活动索引将在服务器上自动更新。

手镯:

false

Bean:

<p:tabView activeIndex="#{stanzaBean.activeIndex}"
           cache="false"
           dynamic="true">