如何在TabMenu中更改activeindex

时间:2013-04-15 10:39:27

标签: primefaces

我有一个关于primefacess的组件Tabmenu的问题,特别是属性活动索引,即所选页面的索引。我想根据选择的页面进行更改,但它始终固定在首页上!这是我的代码:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui">

    <p:tabMenu rendered="true"   widgetVar="index">  
        <p:menuitem value="Home" url="Menu.jsf" icon="ui-icon-star"/>  
        <p:menuitem value="Fabricants" url="/pagess/pagesFabricant/Fabricant.jsf" icon="ui-icon-wrench" oncomplete="index.select(1)"/>  
        <p:menuitem value="Composants" url="/pagess/pagesComposant/Composant.jsf" icon="ui-icon-search" oncomplete="index.select(2)"/>  
        <p:menuitem value="Dossier d'equivalence" url="DEQ.jsf" icon="ui-icon-document" oncomplete="index.select(3)"/>  
    </p:tabMenu> 
    </ui:composition>

它不起作用


你的coepration thx,但它没有工作

xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui">

<p:tabMenu activeIndex="0" > 
    <p:menuitem value="Home" url="Menu.jsf" icon="ui-icon-star"  update="@all"/>  
    <p:menuitem value="Fabricants" url="/pagess/pagesFabricant/Fabricant.jsf" icon="ui-icon-wrench" update="@all" />  
    <p:menuitem value="Composants" url="/pagess/pagesComposant/Composant.jsf" icon="ui-icon-search" update="@all"/>  
    <p:menuitem value="Dossier d'equivalence" url="DEQ.jsf" icon="ui-icon-document"  update="@all"/>  
</p:tabMenu> 

</ui:composition>  

6 个答案:

答案 0 :(得分:1)

tabmenu上的 activeIndex 属性设置该索引上的选项卡处于活动状态。如果你点击primefaces tabmenu展示的标签并继续查看源代码示例,你会发现这正是发生的事情。他们在每个页面上设置了不同的activeIndex。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

创建template.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<ui:composition 
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui">

    <p:tabMenu activeIndex="#{activeIndex}">
        <p:menuitem 
            value="tab1"
            url="/tab1.jsf">
        </p:menuitem>
        <p:menuitem 
            value="tab2" 
            url="/tab2.jsf">
        </p:menuitem>   
    </p:tabMenu>

    <h:panelGroup id="mainPanel" style="width:100%">
        <ui:insert name="page">Page Content</ui:insert>
    </h:panelGroup>

</ui:composition>

在标签页中设置参数

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui" 
    template="template.xhtml">

    <ui:param name="activeIndex" value="1" />

    <ui:define name="page">
        tab1 content
    </ui:define>
</ui:composition>

答案 3 :(得分:0)

考虑您有两个.jsf文件,即 Menu.jsf Fabricant.jsf

将以下代码段放在 Menu.jsf 中,从menuItem中选择第0个索引

<p:tabMenu activeIndex="0" > 
    <p:menuitem value="Home" url="Menu.jsf" icon="ui-icon-star"/>  
    <p:menuitem value="Fabricants" url="/pagess/pagesFabricant/Fabricant.jsf" icon="ui-icon-wrench"/>  
</p:tabMenu> 

将以下代码段放在 Fabricant.jsf 中,从menuItem中选择第一个索引

   <p:tabMenu activeIndex="1" > 
        <p:menuitem value="Home" url="Menu.jsf" icon="ui-icon-star"/>  
        <p:menuitem value="Fabricants" url="/pagess/pagesFabricant/Fabricant.jsf" icon="ui-icon-wrench"/>  
    </p:tabMenu>

了解更多信息click here

答案 4 :(得分:0)

<p:tabMenu rendered="true"   widgetVar="#{bean.index}">  
        <p:menuitem value="Home" action="#{bean.redirect(1)}"/>  
        <p:menuitem value="Fabricants" action="#{baen.redirect(2)}"/>  
</p:tabMenu> 


on my bean {
int index;
getter and setter;

public String redirect(int a){
if (a==1){
  index=1;
return "Home" or // "/home.jsf
 }
else if (a==2){
 index =2;
return "Fabricant";
}
}

它可以很好地为你的合作而努力:)

答案 5 :(得分:0)

使用标签菜单作为其他网页<ui:include>编辑的组件时,我遇到了同样的问题。我使用上面的建议进行了以下修复:

组件(让我们称之为myMenu.xhtml):

<p:tabMenu id="myMenuBar" activeIndex="#{parentIndex}">
    <p:menuitem value="Page One" action="#{PageOneBacker.mainNavigation}" />
    <p:menuitem value="Page Two" action="#{PageTwoBacker.mainNavigation}" />
    <p:menuitem value="Page Three" action="#{PageThreeBacker.mainNavigation}" />
</p:tabMenu>

现在每页都有:

<ui:include src="../myMenu.xhtml">
    <ui:param name="parentIndex" value="XXX" />
</ui:include>

其中XXX是菜单中该页面的数字索引,从0开始。我不会百分之百地对#34;硬编码&#34;这些索引就像这样,但它是一个解决方案。