Primefaces 更改选项卡菜单中的ActiveIndex

Primefaces 更改选项卡菜单中的ActiveIndex,primefaces,tabs,Primefaces,Tabs,我正在使用Primefaces 3.5,在更改ActiveIndex时遇到了一个问题。在选项卡之间切换时,ActiveIndex不会更改。这是我的选项卡菜单代码: <h:form id="formMenu"> <p:tabMenu id="tabMenu" activeIndex="#{toolbarBean.currentTab}"> <p:menuitem value="Main" action="#{toolbarBean.changeAct

我正在使用Primefaces 3.5,在更改ActiveIndex时遇到了一个问题。在选项卡之间切换时,ActiveIndex不会更改。这是我的选项卡菜单代码:

 <h:form id="formMenu">
 <p:tabMenu id="tabMenu" activeIndex="#{toolbarBean.currentTab}">
      <p:menuitem value="Main"  action="#{toolbarBean.changeActiveIndex(0)}" />
      <p:menuitem value="Page2" action="#{toolbarBean.changeActiveIndex(1)}" />
      <p:menuitem value="Page3" actionListener="#{toolbarBean.changeActiveIndex(2)}" />
      <p:menuitem value="Page4" action="#{toolbarBean.changeActiveIndex(3)}" />
  </p:tabMenu>
  </form>
}


当变量currentTab被分配了正确的值时,动作部分可以正常工作。但是,一旦运行页面重定向部分,toolbarBean将被重置,activeIndex将再次从0开始。有人知道我做错了什么吗?

我试图重现错误,但没有成功

我相信我使用的代码示例具有您需要的特性。请查看:

*景色

请注意,ToolbarBean几乎是相同的。在使用@Named时,请查看ManagedBean是否确实在会话范围内


另一件值得一提的事情是main.xhtml、page1.xhtml、page2.xhtml等都有相同的内容,除了中心布局单元的内容。

看看我对这个问题的回答:

我想这就是你要找的

编辑: 以下是完整的答案:

我在PrimeFaces showcase中找到了一个解决方案。您可以向menuitem添加请求参数,并将此参数附加到url。因此,不需要支持bean来保持活动索引:

<p:tabMenu activeIndex="#{param.i}">
   <p:menuitem value="Home" icon="ui-icon-home" url="page1.xhtml?i=0">
      <f:param name="i" value="0" />
   </p:menuitem>
   <p:menuitem value="Search" icon="ui-icon-search" url="page2.xhtml?i=1">
      <f:param name="i" value="1" />
   </p:menuitem>
   ...
</p:tabMenu>

...

那么,您想做什么?我希望它更改选项卡的活动索引,以便用户可以看到当前页面的选项卡处于活动状态。为什么不像在Showcase中一样使用?将页面链接放在p:menuitem的“url”属性中,而不是在bean中控制它。看一看:请注意,第3页选项卡上的actionListener不会生成导航。的可能重复虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面更改,仅链接的答案可能会无效。对不起,我有点懒;-)为什么您的解决方案更好@ErkanErol?@QueryLars,因为您必须在方法中的所有刷新和重定向中发送索引。这很难维持。
<p:layout fullPage="true">  
    <p:layoutUnit position="north" size="100" header="Top" resizable="true" closable="true" collapsible="true">  
        <h:form id="formMenu">
            <p:tabMenu id="tabMenu" activeIndex="#{toolbarBean.currentTab}">
                <p:menuitem value="Main"  action="#{toolbarBean.changeActiveIndex(0)}" />
                <p:menuitem value="Page2" action="#{toolbarBean.changeActiveIndex(1)}" />
                <p:menuitem value="Page3" action="#{toolbarBean.changeActiveIndex(2)}" />
                <p:menuitem value="Page4" action="#{toolbarBean.changeActiveIndex(3)}" />
            </p:tabMenu>
        </h:form>
    </p:layoutUnit>  

    <p:layoutUnit position="south" size="100" header="Bottom" resizable="true" closable="true" collapsible="true">  
        <h:outputText value="South unit content." />  
    </p:layoutUnit>  

    <p:layoutUnit position="west" size="200" header="Left" resizable="true" closable="true" collapsible="true">  
        <h:outputText value="West unit content." />  
    </p:layoutUnit>  

    <p:layoutUnit position="east" size="200" header="Right" resizable="true" closable="true" collapsible="true" effect="drop">  
        <h:outputText value="Right unit content." />  
    </p:layoutUnit>  

    <p:layoutUnit position="center">  
        MAIN
    </p:layoutUnit>  
</p:layout>  
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class ToolbarBean implements Serializable {

    private int currentTab;

    public int getCurrentTab() {
        return currentTab;
    }

    public void setCurrentTab(int currentTab) {
        this.currentTab = currentTab;
    }

    public String changeActiveIndex(int currentTab) {
        this.currentTab = currentTab;
        switch (currentTab) {
            case 0:
                return "main";
            case 1:
                return "page2";
            case 2:
                return "page3";
            case 3:
                return "page4";
            default:
                return "page5";
        }
    }
}
<p:tabMenu activeIndex="#{param.i}">
   <p:menuitem value="Home" icon="ui-icon-home" url="page1.xhtml?i=0">
      <f:param name="i" value="0" />
   </p:menuitem>
   <p:menuitem value="Search" icon="ui-icon-search" url="page2.xhtml?i=1">
      <f:param name="i" value="1" />
   </p:menuitem>
   ...
</p:tabMenu>