私はprimefaces 4.0を使用しており、4つのタブを持つタブビューを持っています。いずれかのタブのボタンをクリックすると、すべてのタブが更新されますが、現在のタブが選択されたままになります。ただし、タブビューを更新すると、選択したタブが最初のタブに戻り続けます。
タブビュー全体を更新するときに現在のタブを維持する簡単な方法はありますか?
私はprimefaces 4.0を使用しており、4つのタブを持つタブビューを持っています。いずれかのタブのボタンをクリックすると、すべてのタブが更新されますが、現在のタブが選択されたままになります。ただし、タブビューを更新すると、選択したタブが最初のタブに戻り続けます。
タブビュー全体を更新するときに現在のタブを維持する簡単な方法はありますか?
tabView の activeIndex 属性を使用できます。
<p:tabView activeIndex="#{bean.activeIndex}"/>
activeIndex は、デフォルト値 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;
この簡単な解決策は私にとってはうまくいきます。これは、ヘッダーのようなタブ リストで、すべてのページで維持されます。
<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