Динамическое простое меню menuItem не запускает команду - PullRequest
1 голос
/ 14 октября 2019

Среда:

  • Java 7
  • Jboss 5.2
  • Primefaces 6.2

Проблема Iполучаем, что когда я нажимаю на элемент меню, команда не запускает метод themeSwitcherBean.changeToOld. Что не так?

MenuModel menu = new DefaultMenuModel();

Создать меню

...
for (Iterator<Menu> it = children.iterator(); it.hasNext(); ) {
    Menu subMenu = (Menu) it.next();

    String index = subMenu.getCodi();
    String element = rootCodi + index;

    DefaultMenuItem menuItem = new DefaultMenuItem(menuName);

    menuItem.setId(element);

    menuItem.setUrl(subMenu.getServletPath());
        menuItem.setCommand("#{themeSwitcherBean.changeToNew}");
    menuItem.setUpdate(":content");

    rootNode.addElement(menuItem);

}

menu.addElement(rootNode);
...

Menu.xhtml

<h:form id="frmMenu">
    <pu:menu model="#{sessionBean.menu}">
</h:form>

1 Ответ

2 голосов
/ 14 октября 2019

Если вы задаете URL для свойства menuItem.url, оно отображается как простая гиперссылка с использованием href . Если щелкнуть это, браузер перейдет к указанному URL-адресу и запросит его с помощью GET вместо выполнения запроса POST, необязательно с использованием AJAX. В конечном итоге это не обновит ": content" AJAX и не вызовет ваш метод действия themeSwitcherBean.changeToNew.

Для того, чтобы ваш метод действия вызвал, вы должны пропустить эту строку :

menuItem.setUrl(subMenu.getServletPath());

Если вы обнаружите, что вам нужно перезагрузить всю страницу (что, вероятно, при переключении тем) вместо элемента, на который ссылается только ": content", заставьте ваш метод действия вернуть эту инструкцию как String:

public String changeToNew() {
    // do something ...
    // ...
    String viewId = FacesContext.getCurrentInstance().getViewRoot().getViewId();
    return viewId + "?faces-redirect=true&includeViewParams=true";
}

В этом случае вы можете отключить AJAX в этом пункте меню, немного уменьшив накладные расходы на запрос / ответ / javaScript:

menuItem.setAjax(false);
...