2013-11-02 64 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

相關問題