如何在Primefaces tabView中设置活动选项卡?

Hor*_*lez 9 java menubar primefaces tabview

我有一个菜单栏,子菜单上有两个项目,两个都调用同一页面:

<p:menubar autoSubmenuDisplay="true">  
   <p:submenu label="Perfil">  
       <p:menuitem value="Editar" url="perfil.xhtml" />  
       <p:menuitem value="Ver" url="perfil.xhtml" />  
   </p:submenu>  
</p:menubar>  
Run Code Online (Sandbox Code Playgroud)

在那个页面中,我有一个带有两个标签的tabview:

<p:tabView dynamic="true">  
    <p:tab id="ver" title="Ver perfil">  
        <ui:include src="verPerfil.xhtml" />    
    </p:tab>  
    <p:tab id="editar" title="Editar perfil">   
    <ui:include src="editarPerfil.xhtml" />  
    </p:tab>  
</p:tabView>  
Run Code Online (Sandbox Code Playgroud)

如何设置活动选项卡,以便每个菜单项激活相应的选项卡?

Fis*_*Gel 26

如果你想这样做.你不能使用urlin,p:menuitem因为我们必须跳转到prefil.xhtml页面之前调用一个方法来更改tabindex .如果您使用url,则在我们跳到prefil.xhtml页面后将调用该方法.

首先,您可以使用的操作字段p:menuitem,该方法返回您要跳过的地址:

<p:menubar autoSubmenuDisplay="true">  
    <p:submenu label="Perfil">  
        <p:menuitem value="Editar" action="#{some.editar}" ajax="false"/>  
        <p:menuitem value="Ver" action="#{some.ver}" ajax="false" />  
    </p:submenu>  
</p:menubar> 
Run Code Online (Sandbox Code Playgroud)

这两种方法可以像这样改变tabindex:

public String editar() {
    tabindex = 0;
    return "verPerfil";
}

public String ver() {
    tabindex = 1;
    return "verPerfil";
}
Run Code Online (Sandbox Code Playgroud)

然后p:tabView有一个名为的属性activeIndex.它是活动选项卡的索引,其默认值为0.所以你可以这样做:

<p:tabView dynamic="true" activeIndex="#{some.tabindex}" >
    <p:tab id="ver" title="Ver perfil">
        <ui:include src="verPerfil.xhtml" />
    </p:tab>
    <p:tab id="editar" title="Editar perfil">   
        <ui:include src="editarPerfil.xhtml" />
    </p:tab>
</p:tabView>
Run Code Online (Sandbox Code Playgroud)

然后每个menuitem将激活相应的选项卡.