问题:使用Primefaces 5,我可以动态构建一个只包含menuitems的简单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}" />
当我点击&#34;动态&#34;内置菜单的菜单项我在控制台上收到此错误...
<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
>
问题是我只是误用了&#34; p:menu&#34;标签首先,当我构建静态版本?... - 这就是为什么我尝试构建相同菜单的动态版本并不像我期望的那样工作?
感谢您的帮助!
:)
答案 0 :(得分:2)
我遇到了同样的错误,并通过为每个MenuItem设置一个数字ID来解决它。
例如item.setId("1");
也许它对你有帮助....
答案 1 :(得分:0)
添加所有MenuElement后,应在MenuModel上调用generateUniqueIds()
。