我被困在p:Tabmenu请帮忙

时间:2013-04-18 16:43:39

标签: jsf primefaces

我正在使用p:tabMenu组件。我有4个菜单项,每个都重定向到不同的jsf页面,但问题是返回的页面没有更改activeindex,而activeindex与初始值0保持一致。

此代码位于所有页面的模板页面

<h:form>
    <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:menuitem value="Composants" url="/pagess/pagesComposant/Composant.jsf" icon="ui-icon-search"  />  
        <p:menuitem value="Dossier d'equivalence" url="DEQ.jsf" icon="ui-icon-document"  />  
    </p:tabMenu> 
    </h:form>

如果知道应该自动更改,我该如何解决这个问题?

我托盘一个托管bean无法正常工作

public class LoginBean {
    private int activeindex=0;
public int getActiveindex() {
        return activeindex;
    }

    public void setActiveindex(int activeindex) {
        this.activeindex = activeindex;
    }  

   public void Dirige(int a){

       activeindex=a;
   }}..



<p:tabMenu activeIndex="#{loginBean.activeindex}" > 
        <p:menuitem value="Home" url="Menu.jsf" icon="ui-icon-star"  action="#{loginBean.Dirige(0)}"/>  
        <p:menuitem value="Fabricants" url="/pagess/pagesFabricant/Fabricant.jsf" icon="ui-icon-wrench" action="#{loginBean.Dirige(1)}"/>
    </p:menuitem>

它也不起作用

我尝试为everu menuitem添加update =“@ all”。它是相同的:(


我忘了告诉你。这个组件在模板页面上..所有页面都使用这个模板 ! 当页面在braowser上收费时它会占用模板的属性, 在模板上代码是

<h:form>
    <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:menuitem value="Composants" url="/pagess/pagesComposant/Composant.jsf" icon="ui-icon-search"  />  
        <p:menuitem value="Dossier d'equivalence" url="DEQ.jsf" icon="ui-icon-document"  />  
    </p:tabMenu> 
    </h:form>

它显示0上的活动索引,为此我重定向的所有页面都没有同步活动索引.. 有什么好感的吗

1 个答案:

答案 0 :(得分:0)

我认为只能更新动作方法中的组件树。

您可以在动作方法中动态修改组件并同样设置活动索引。

这是tabMenu组件api,供进一步参考。

http://www.primefaces.org/docs/api/3.5/org/primefaces/component/tabmenu/TabMenu.html

public void getFooClientId(int activeIndex) {
    FacesContext context = FacesContext.getCurrentInstance();
    UIViewRoot root = context.getViewRoot();

    final String componentId = "foo";
    UIComponent c = findComponent(root, componentId);
    TabMenu t = (TabMenu)c;
    t.setActiveIndex(activeIndex);


  }

  /**
   * Finds component with the given id
   */
  private UIComponent findComponent(UIComponent c, String id) {
    if (id.equals(c.getId())) {
      return c;
    }
    Iterator<UIComponent> kids = c.getFacetsAndChildren();
    while (kids.hasNext()) {
      UIComponent found = findComponent(kids.next(), id);
      if (found != null) {
        return found;
      }
    }
    return null;
  }