我看到2種方法在這裏:
1)每個使用一頁 標籤。使用p:tabMenu組件(在primefaces 3.4中可用)。在這種情況下,如果用戶正在查看一個標籤並點擊第二個標籤來顯示它,他將被重定向到另一個頁面。
優點:如果你想從另一個頁面導航到第二個標籤,很容易,因爲它是一個不同的頁面(參見第二種方法)。此外,每個標籤頁的加載速度都很快,因爲它只包含一個標籤的代碼。你會有更好的代碼分離。
缺點:如果用戶轉到另一個選項卡,則當前選項卡中輸入的所有數據都將丟失。另外,從一個標籤更改爲另一個標籤並不是那麼快,因爲涉及導航。
這是頁爲一個突片(tab1.xhtml):
<h:body>
<p:tabMenu activeIndex="0">
<p:menuitem value="Tab 1" url="/tab1.jsf" />
<p:menuitem value="Tab 2" url="/tab2.jsf" />
</p:tabMenu>
<!-- content of tab1 goes here -->
</h:body>
這對於其它標籤的代碼(tab2.xhtml):
<h:body>
<p:tabMenu activeIndex="1">
<p:menuitem value="Tab 1" url="/tab1.jsf" />
<p:menuitem value="Tab 2" url="/tab2.jsf" />
</p:tabMenu>
<!-- content of tab2 goes here -->
</h:body>
2)另一種方法是使用p:tabView創建一個頁面。在這種情況下,所有的標籤內容都進入同一頁面。您可以在p:tabView上使用dynamic =「true」屬性按需渲染選項卡內容並加快頁面加載速度。
優點:從標籤頁到標籤頁的平滑過渡(始終保持在同一頁面上)。
缺點:如果您想直接導航到第二個選項卡,例如,它並不那麼容易。因此必須使用tabView的activeIndex屬性指向處理第一個選項卡的託管bean中的屬性,並且當您實際上不需要時,仍然會構建第一個選項卡的bean。
這是主要的頁面包含標籤代碼:
<h:body>
<p:tabView dynamic="true">
<p:tab id="tab1" title="Tab 1" >
<ui:include src="tab2.xhtml" />
</p:tabView>
<p:tab id="tab2" title="Tab 2" >
<ui:include src="tab2.xhtml" />
</p:tab>
</p:tabView>
</h:body>
,你需要爲每個標籤頁(插入到主網頁): tab1.xhtml:
tab2.xhtml:
你說的CAL標籤的代碼是什麼意思? –
您應該瞭解如何使用[使用Facelets進行模板](http://www.mkyong.com/jsf2/jsf-2-templating-with-facelets-example/)。您可以讓所有的tab.jsf文件擴展包含tabMenu的主模板。 –
你能告訴我如何使用'ui:insert'到'p:tabMenu'中嗎? – user1285928