我正在使用primefaces 4.0並且有一個帶有4個選項卡的tabview。當我點擊其中一個選項卡中的按鈕時,我想更新所有選項卡,但保持當前選項卡處於選中狀態。但是,當我更新TabView時,選定的選項卡會一直設置回第一個選項卡。更新tabview時保留當前標籤
是否有一個簡單的方法來更新整個tabview時保持當前選項卡?
我正在使用primefaces 4.0並且有一個帶有4個選項卡的tabview。當我點擊其中一個選項卡中的按鈕時,我想更新所有選項卡,但保持當前選項卡處於選中狀態。但是,當我更新TabView時,選定的選項卡會一直設置回第一個選項卡。更新tabview時保留當前標籤
是否有一個簡單的方法來更新整個tabview時保持當前選項卡?
你可以使用activeIndex attribut從TabView的:
<p:tabView activeIndex="#{bean.activeIndex}"/>
activeIndex與活動選項卡的默認值爲0索引的整數。
除了另一個答案還有一件事: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;
這是關於上述答案的最準確答案。您也可以使用'
'而不是在視圖樹的'tab'和'tabview'控件上搜索 – user1017344您可以在選項卡上將選項卡索引存儲爲全局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)" />
這個簡單的解決方案適用於我。 這是我的標籤列表,它就像一個頭,在所有網頁維護:
<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
然後用
並從事件的標籤ID再次在onTabChange監聽器設置activeIndex 。得到它了!謝謝! – user2947084我似乎已經忘記了一件事。^_^ 不要忘記驗證答案。 –