2013-11-02 63 views
3

我正在使用primefaces 4.0并且有一个带有4个选项卡的tabview。当我点击其中一个选项卡中的按钮时,我想更新所有选项卡,但保持当前选项卡处于选中状态。但是,当我更新TabView时,选定的选项卡会一直设置回第一个选项卡。更新tabview时保留当前标签

是否有一个简单的方法来更新整个tabview时保持当前选项卡?

回答

2

你可以使用activeIndex attribut从TabView的:

<p:tabView activeIndex="#{bean.activeIndex}"/> 

Primeface User Guide

activeIndex与活动选项卡的默认值为0索引的整数。

+1

然后用并从事件的标签ID再次在onTabChange监听器设置activeIndex 。得到它了!谢谢! – user2947084

+0

我似乎已经忘记了一件事。^_^ 不要忘记验证答案。 –

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; 
+0

这是关于上述答案的最准确答案。您也可以使用''而不是在视图树的'tab'和'tabview'控件上搜索 – user1017344

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)" /> 
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

相关问题