Как заполнять пункты меню из JSF-компонента

Я кодирую раскрывающееся меню, в котором нажимается кнопочное меню, и в нем отображаются подменю или элементы меню. В настоящее время у меня возникают проблемы с заполнением элемента p: menuitem из bean-компонента. Раньше я пробовал кодировать как таковой

<p:menu label = "PrimeFaces" icon = "ui-icon-heart">
  <p:menuitem value = "Home" url = "http://www.primefaces.org" icon = "ui-icon-home" />
  <p:menuitem value = "Docs" url = "http://www.primefaces.org/documentation" icon = "ui-icon-document" />
  <p:menuitem value = "Download" url = "http://www.primefaces.org/downloads" icon = "ui-icon-arrowthick-1-s" />
  <p:menuitem value = "Support" url = "http://www.primefaces.org/support" icon = "ui-icon-wrench" />
</p:menu>

Как вы заметили, значения пунктов меню (Home, Docs и т. д.) Жестко запрограммированы в JSF. Как я могу получить значения из bean-компонента и заполнить его как пункт меню? Есть ли у p: menuitem что-то похожее на f: selectItems, когда я могу установить список в качестве значения?

Я хочу попробовать заполнить элементы меню из bean-компонента, и метод будет запущен при выборе отдельного элемента меню.

Помощь очень ценится. Спасибо.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
999
2

Ответы 2

Если вы используете Primefaces, вы можете попробовать:

фасоль:

public class MyItem {
  private String value;
  private String url;
  private String icon;
  ....
  getters/setters
  ...
}


public List<MyItem> getMenuItems() {
  // build list
}

xhtml:

<p:repeat value = "#{bean.menuItems}" var = "item">
  <p:menuitem value = "#{item.value}" url = "#{item.url}" icon = "#{item.icon}" />
</prepeat>

Я пробовал использовать p: repeat, но система попросила изменить использование ui: repeat. Когда я использовал ui: repeat, отображается ошибка com.sun.faces.facelets.component.UIRepeat не может быть преобразован в org.primefaces.model.menu.MenuElement

Nik Mohamad Lokman 07.06.2018 04:03

Вы уверены, что меню представляет собой компонент jsf? Я думаю, вы можете использовать компонент Primefaces. Схема имен обычно определяется следующим образом, а p: menu является компонентом простых шрифтов:

<html xmlns = "http://www.w3.org/1999/xhtml"
      xmlns:h = "http://java.sun.com/jsf/html"
      xmlns:ui = "http://java.sun.com/jsf/facelets"
      xmlns:p = "http://primefaces.org/ui"
      xmlns:f = "http://java.sun.com/jsf/core"
      xmlns:c = "http://java.sun.com/jsp/jstl/core"
      xmlns:sec = "http://www.springframework.org/security/tags" >

Вы можете настроить и использовать меню из bean-компонента следующим образом:

xhtml:

 <p:menu model = "#{menuBean.model}" />

Фасоль:

public class MenuBean {

    private MenuModel model;

    public MenuBean() {

    model = new DefaultMenuModel();
    //First submenuDefaultSubMenu firstSubmenu = new DefaultSubMenu("Dynamic Submenu");
    DefaultMenuItem item = new DefaultMenuItem("External");
    item.setUrl("http://www.primefaces.org");
    item.setIcon("ui-icon-home");
    firstSubmenu.addElement(item);
    model.addElement(firstSubmenu);
    //Second submenuDefaultSubMenu secondSubmenu = new DefaultSubMenu("Dynamic Actions");
    item = new DefaultMenuItem("Save");
    item.setIcon("ui-icon-disk");
    item.setCommand("#{menuBean.save}");
    item.setUpdate("messages");
    secondSubmenu.addElement(item);
    item = new DefaultMenuItem("Delete");
    item.setIcon("ui-icon-close");
    item.setCommand("#{menuBean.delete}");
    item.setAjax(false);
    secondSubmenu.addElement(item);
    item = new DefaultMenuItem("Redirect");
    item.setIcon("ui-icon-search");
    item.setCommand("#{menuBean.redirect}");
    secondSubmenu.addElement(item);
    model.addElement(secondSubmenu);
    }

    public MenuModel getModel() { return model; }
}

Здесь вы можете увидеть всю документацию: https://www.primefaces.org/docs/guide/primefaces_user_guide_6_2.pdf (стр. 333)

И в витрине ;-) И я бы сказал, что дубликат этого есть где-то в stackoverflow ;-)

Kukeltje 16.07.2019 13:09

Другие вопросы по теме