我正在使用primefaces 4.0并且有一个带有4个标签的tabview。当我单击其中一个选项卡中的某个按钮时,我想更新所有选项卡,但保持选中当前选项卡。但是,当我更新tabview时,选定的选项卡会一直回到第一个选项卡。
更新整个tabview时是否有一种简单的方法可以保留当前标签?
答案 0 :(得分:4)
您可以使用tabView中的activeIndex attribut:
<p:tabView activeIndex="#{bean.activeIndex}"/>
activeIndex是一个整数,默认值为0.活动标签的索引。
答案 1 :(得分:1)
除了另一个答案之外,还有一件事:activeIndex
实际上是客户端索引。这意味着如果你有未渲染的标签,那么你必须进行补偿,因此未渲染的标签不会计入索引号。你可以这样做:
String targetTabClientId = "my_tabview:my_tab";
Tab targetTab = (Tab) FacesContext.getCurrentInstance().getViewRoot().findComponent(targetTabClientId);
TabView tabView = (TabView) targetTab.getParent();
int clientActiveIndex = 0;
for (UIComponent tab : tabView.getChildren()) {
if (tab.equals(targetTab))
break;
if (tab.isRendered())
++clientActiveIndex;
}
return clientActiveIndex;
答案 2 :(得分:1)
您可以在选项卡上将选项卡索引存储为全局JavaScript变量。
<script>
var activeIndex = 0;
function handleTabChange(event, index) {
activeIndex = index;
}
</script>
...
<p:tabView widgetVar="tabView1" onTabChange="handleTabChange(event, index)">
...
</p:tabView>
然后,您可以在完成命令时从全局JavaScript变量恢复选项卡索引。
<p:commandButton ... oncomplete="tabView1.select(activeIndex)" />
答案 3 :(得分:0)
这个简单的解决方案适合我。 这是我的标签列表,就像标题一样,在所有页面上都保持着:
<h:form id="menuForm">
<p:tabMenu activeIndex="#{param.i}" >
<p:menuitem value="Admin" outcome="/administration/index.xhtml?i=0" >
<f:param name="i" value="0"/>
</p:menuitem>
<p:menuitem value="Marketing" outcome="/marketing/index.xhtml?i=1" >
<f:param name="i" value="1"/>
</p:menuitem>
...
</p:tabMenu>
</h:form>
然后,如果我有一个按钮指示我到另一个页面,我的按钮看起来像这样:
<p:button outcome="/edit-user.xhtml?i=2" value="Edit User" />
您可以在此处查看演示:http://www.primefaces.org/showcase/ui/menu/tabMenu.xhtml?i=0