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




Если вы используете 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>
Вы уверены, что меню представляет собой компонент 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 ;-)
Я пробовал использовать p: repeat, но система попросила изменить использование ui: repeat. Когда я использовал ui: repeat, отображается ошибка com.sun.faces.facelets.component.UIRepeat не может быть преобразован в org.primefaces.model.menu.MenuElement