У меня есть существующая рабочая панель меню Primefaces 2 с элементами меню, определенными следующим образом:
<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>
Я хочу переместить модель меню из xhtml в базовый компонент следующим образом:
<p:menubar style="width:625px" autoSubmenuDisplay="true" model="#{cockpitMenuBean.menuModel}"/>
Проблема и мой вопрос сосредоточены на атрибуте action
выше.
CockpitMenuBean.displayCreateDialog () возвращает строку
public String displayCreateDialog() {
cockpitMenu = new CockpitMenu();
createDialogVisible = true;
return "cockpitMenu";
}
menuItem.setAction(arg);
, который, казалось, должен быть таким же, как атрибут action
в XHTML, ищет arg как MethodBinding
, который не рекомендуется.
menuItem.setActionExpression(arg)
следующий наиболее вероятный, поскольку строка в XHTML является выражением EL #{cockpitMenuBean.displayCreateDialog}
, но это просто возвращает строку.
menuItem.setActionListener(arg)
устарело.
Я не соединяю точки при переходе от XHTML к компоненту поддержки при создании соответствующих пунктов меню.
Я пытался:
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);
И пункт меню отображается, но ничего не происходит, когда я выбираю его.