我有两个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。
谢谢。
答案 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">