Reputation: 81
I have an existing working Primefaces 2 MenuBar with the MenuItems defined as follows:
<p:menubar style="width:625px" autoSubmenuDisplay="true">
<p:submenu label="#{messages.label_home}">
<p:menuitem value="#{messages.label_logout}" url="#" icon="ui-icon ui-icon-close"/>
</p:submenu>
<p:submenu label="#{messages.label_cockpit}">
<p:menuitem value="#{messages.label_create}" action="#{cockpitMenuBean.displayCreateDialog}" icon="ui-icon ui-icon-document" ajax="false"/>
<p:menuitem value="#{messages.label_list}" action="#{cockpitMenuBean.displayList}" icon="ui-icon ui-icon-folder-open" ajax="false"/>
</p:submenu>
I want to move the menu model from the xhtml to a backing bean as follows:
<p:menubar style="width:625px" autoSubmenuDisplay="true" model="#{cockpitMenuBean.menuModel}"/>
The problem and my question is centered on the action
attribute above.
The CockpitMenuBean.displayCreateDialog() returns a string
public String displayCreateDialog() {
cockpitMenu = new CockpitMenu();
createDialogVisible = true;
return "cockpitMenu";
}
menuItem.setAction(arg);
which seemed like it should be the same as the action
attribute in the XHTML is looking for arg to be a MethodBinding
which is deprecated.
menuItem.setActionExpression(arg)
is next most likely since the string in the XHTML is an EL expression #{cockpitMenuBean.displayCreateDialog}
, but that just returns a String.
menuItem.setActionListener(arg)
is deprecated.
I am not connecting the dots in moving from the XHTML to the backing bean in building the menuitems that correspond.
I tried:
MenuItem item1 = new MenuItem();
item1.setValue("Should be first");
item1.setUrl("#");
MethodExpression aEx = expFact.createMethodExpression(elCtx, "#{cockpitMenuBean.displayCreateDialog}", String.class, new Class[0]);
item1.setActionExpression(aEx);
menuModel.addMenuItem(item1);
And the menu item displays but nothing happens when I select it.
Upvotes: 4
Views: 9978