使用Primefaces 5,我应该能够*动态地*构建一个简单的p:菜单只包含菜单项吗?. ..,没有子菜单



问题:使用Primefaces 5,我可以动态地构建一个简单的p:菜单只包含菜单项-即,没有子菜单?

例如,我能够成功地实现这个静态菜单…

    -
    -
    -
    <h3>Static p:menu  (i.e., no submenus) - WORKING </h3>
    <p:menu id="menustatic">
        <p:menuitem value="operation1"  action="#{breadCrumb.navigate('page0')}" />
        <p:menuitem value="operation2"  action="#{breadCrumb.navigate('page1')}" />
        <p:menuitem value="operation3"  action="#{breadCrumb.navigate('page2')}" />
    </p:menu>
    -
    -
    -

但是,当我试图从托管bean动态地实现上述菜单时,它不起作用…例如,

控制器方法

    -
    -
    -
    private DynamicMenuModel menuModel;
    public MenuModel getMenuModel()
    {
        menuModel = new DynamicMenuModel();
        DefaultMenuItem item = new DefaultMenuItem();
        item.setIcon("ui-icon ui-icon-newwin");
        item.setValue("operation1a");
        item.setCommand("#{breadCrumb.navigate('page0')}");
        menuModel.addElement(item);
        item = new DefaultMenuItem();
        item.setIcon("ui-icon ui-icon-newwin");
        item.setValue("operation1b");
        item.setCommand("#{breadCrumb.navigate('page1')}");
        menuModel.addElement(item);
        item = new DefaultMenuItem();
        item.setIcon("ui-icon ui-icon-newwin");
        item.setValue("operation1c");
        item.setCommand("#{breadCrumb.navigate('page2')}");
        menuModel.addElement(item);
        return menuModel;
    }
    -
    -
    -

页面/标记

    <h3>Dyamic p:menu  (i.e., no submenus) -  NOT WORKING </h3>
    <p:menu id="menudynamic" model="#{menuController.menuModel}" />   

当我点击"动态"构建菜单的菜单项时,我在控制台上收到这个错误…

    <Jul 17, 2014 1:12:52 PM EDT> <Warning> <javax.enterprise.resource.webcontainer.jsf.lifecycle> <BEA-000000> <For input string: "null"
    java.lang.NumberFormatException: For input string: "null"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
        at java.lang.Integer.parseInt(Integer.java:449)
        at java.lang.Integer.parseInt(Integer.java:499)
        at org.primefaces.component.menu.BaseMenuRenderer.findMenuitem(BaseMenuRenderer.java:83)
        at org.primefaces.component.menu.BaseMenuRenderer.decode(BaseMenuRenderer.java:61)
        Truncated. see log file for complete stacktrace
    >       

的问题是,我只是滥用"p:菜单"标签放在首位,当我构建静态版本?-这是为什么我试图建立一个动态版本的同一菜单不工作,因为我期望?

谢谢你的帮助!

:)

我有同样的错误,并通过为每个MenuItem设置一个数字id来解决它。例如:item.setId("1");

也许对你也有帮助....

您应该在添加所有menuelement后调用MenuModel中的generateUniqueIds()

最新更新