Как заполнить пункты меню из бобов JSF - PullRequest
0 голосов
/ 06 июня 2018

Я кодирую выпадающее меню, в котором нажимается меню кнопок, и оно показывает его подменю или пункты меню.В настоящее время у меня возникают проблемы с заполнением элемента p: menu из 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-компонента, и метод будет запущен, когдавыбран отдельный пункт меню.

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

Ответы [ 2 ]

0 голосов
/ 16 июля 2019

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

<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)

0 голосов
/ 06 июня 2018

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

bean:

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>
...