在TabMenu中更改ActiveIndex

时间:2014-01-07 00:38:17

标签: primefaces tabs

我正在使用Primefaces 3.5并且在更改ActiveIndex时遇到了问题。在选项卡之间进行时,ActiveIndex不会更改。这是我的TabMenu代码:

 <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>

toolbarBean.java

@Named
@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";
    }
}

}

在为变量currentTab分配正确值的情况下,操作部分正常工作。但是,一旦它运行页面重定向部分,toolbarBean将被重置,activeIndex将再次从0开始。有没有人对我做错了什么有任何想法?

2 个答案:

答案 0 :(得分:0)

我尝试重现错误但未成功。

我相信我使用的代码示例具有您需要的功能。看看:

* 视图

<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>  

受管Bean

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";
        }
    }
}

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

另一件值得一提的是main.xhml,page1.xhtml,page2.xhtml等,除了中心布局单元内容外,其他内容相同。

答案 1 :(得分:0)

在这个问题中查看我的答案:

How to change activeindex in TabMenu

我认为这就是你要找的东西。

修改 这是完整的答案:

我在PrimeFaces展示中找到了一个解决方案。您可以向menuitem添加请求参数,并将此参数附加到您的网址。因此,不需要支持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>