【问题标题】:Using Primefaces 5, should I be able to *dynamically* build a simple p:menu containing only menuitems? ...i.e., without submenu(s)?使用 Primefaces 5,我应该能够*动态*构建一个仅包含菜单项的简单 p:menu 吗? ...即,没有子菜单?
【发布时间】:2019-05-30 16:09:22
【问题描述】:

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

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

    -
    -
    -
    <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:menu”标签吗?... - 这就是为什么我尝试构建同一菜单的动态版本没有像我预期的那样工作吗?

感谢您的帮助!

:)

【问题讨论】:

  • 原来你可以在不使用“p:submenu”的情况下创建“p:menu”...发现我的动态“p:menu”不起作用,除非在托管 bean 的构造函数中初始化了 MenuModel .
  • 即,...vs.实例化 MenuModel 并在调用的方法中对其进行初始化。还不知道为什么 - 必须使用 RTFM 等
  • 幸运地找到了合适的解决方案?在构造函数中初始化对我来说是没有选择的,因为它在会话期间会发生变化

标签: jsf-2 primefaces


【解决方案1】:

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

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

【讨论】:

  • 好的,这似乎可以工作,但前提是我以 0 开始索引。否则,单击菜单项时会调用错误的操作。
【解决方案2】:

添加完所有 MenuElement 后,您应该在 MenuModel 上调用 generateUniqueIds()

【讨论】:

    猜你喜欢
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2014-09-09
    相关资源
    最近更新 更多