5

我正在使用 primefaces 4.0 并有一个带有 4 个选项卡的选项卡视图。当我单击其中一个选项卡中的按钮时,我想更新所有选项卡但保持当前选项卡处于选中状态。但是,当我更新选项卡视图时,所选选项卡会不断设置回第一个选项卡。

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

4

4 回答 4

6

您可以使用来自 tabView 的 activeIndex 属性:

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

来自Primeface 用户指南

activeIndex 是一个 Integer,默认值为 0。活动选项卡的索引。

于 2013-11-02T10:48:35.947 回答
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;
于 2015-04-13T15:31:03.373 回答
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)" />
于 2015-05-08T22:49:25.333 回答
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

于 2015-09-01T12:03:50.407 回答