Primefaces 6 Проблема с динамическим добавлением menuitem с действиями

#java #primefaces #menuitem

#java #primefaces #элемент меню

Вопрос:

У меня проблема с menuitem. цель состоит в том, чтобы иметь два элемента меню в меню, которое появляется при нажатии на значок из datatable, который запускает два разных действия. все работает нормально: появляется меню, и меню отображается. но когда я пытаюсь создать меню с помощью MenuItem, созданного на стороне сервера с двумя разными командами, я получаю ошибку в визуализации, но, когда я использую только одну команду, она работает нормально.

Я пытался использовать только один, и он работает нормально, я попытался использовать сначала «ОДИН», а затем «ДВА», и он работает нормально, но он взрывается, когда я пытаюсь использовать оба вместе.

вот код:

 DefaultMenuItem firstmenuitem = new DefaultMenuItem("ONE");
firstmenuitem.setIcon("ui-icon-newwin");
firstmenuitem.setCommand("#{myMB.loadDetail1(row, dynMetaCol.id)}");
firstmenuitem.setUpdate("dialog1");
firstmenuitem.setOncomplete("PF('DlgWv1').show()");
menuModel.addElement(firstmenuitem);

DefaultMenuItem secondMenuItem = new DefaultMenuItem("TWO");
secondMenuItem.setIcon("ui-icon-newwin");
secondMenuItem.setCommand("#{myMB.loadDetail2(row, dynMetaCol.id)}");
secondMenuItem.setUpdate("dialog2");
secondMenuItem.setOncomplete("PF('DlgWv2').show()");
menuModel.addElement(secondMenuItem);
  

содержимое xhtml такое:

 ...

<p:menu overlay="true" trigger="dynaButton" my="left top" at="left bottom" styleClass="ui-menu-context ui-menuitem-link" model="#{myMB.menuModel}"/>

...
  

результат:

 XML Parsing Error: unclosed CDATA section
Location: http://myaddress/mywebapp/templates/myfolder
/myfolder/mypage.xhtml
Line Number 19, Column 5647:
  

похоже, что он не способен отображать действия и обновление для второй команды.

пожалуйста, помогите.

Комментарии:

1. хорошо, похоже, что проблема заключается в этих двух строках: secondMenuItem.setUpdate(«dialog2»); secondMenuItem.setOncomplete(«PF(‘DlgWv2’).show()»);

2. хорошо, возможно, я нашел проблему. это тот самый secondMenuItem.setUpdate(«dialog2»);. Я попытаюсь использовать тот же диалог и указать «если», но я не могу понять, как возникает эта проблема

Ответ №1:

Поскольку я не могу объяснить проблему, я нашел обходной путь.

проще говоря, я удалил эти строки:

 firstmenuitem.setUpdate("dialog1");
firstmenuitem.setOncomplete("PF('DlgWv1').show()");

secondMenuItem.setUpdate("dialog2");
secondMenuItem.setOncomplete("PF('DlgWv2').show()");
  

и в каждый метод действия (loadDetail1 и loadDetail2) Я использую этот простой метод:

 public static void updateAndShowDialog(String dialogId, String widgetVarName) {
    RequestContext requestContext = RequestContext.getCurrentInstance();
    requestContext.update(dialog);
    requestContext.execute("PF('"   widgetVarName   "').show()");
}
  

надеюсь, это может помочь.

с наилучшими пожеланиями.