Reputation: 51
I tried to implements programmatic panelmenu
using defaultmenumodel
and panelmenu
with PrimeFaces 4.0. The problem is when I implement a simple model, one or more submenus that contains one o more menuitems runs ok. But when I implement submenus that contains menuitmes and more submenus that containts another menuitems, the defaultmenumodel
not shows all levels.
Menu level one
...MenuItem one.one *
...MenuItem one.two *
...SubMenu one.one
......MenuItem one.one.one
......MenuItem one.one.two
...SubMenu one.two
......MenuItem one.two.one
Menu lebel two
... And so on
The MenuItem with * not shown when page is rendered How can I implement these model of menu using DefaultMenuModel and ?? I want to use pojo to save the menu structure in DataBase for managing. Thanks
(Added / Edited) I have run next code suggested but not work using p:panelMenu. With p:menuBAr works well showing an Item and a SubMenu with item inside.
//create the first menu item It is not SubMenu, It's a simple MenuItem
//This item not shows in <p:panelmenu>
DefaultMenuItem accueil = new DefaultMenuItem();
accueil.setStyleClass("only simple menuItem");
accueil.setUrl("/accueil.jsf");
this.menumodel.addElement(accueil);
//This work properly ans shows in <p:panelMenu>
DefaultSubMenu submenu = new DefaultSubMenu();
submenu.setIcon(null);
submenu.setLabel("submenu 01");
this.menumodel.addElement(submenu);
//Add items to submenu
DefaultMenuItem item = new DefaultMenuItem();
item.setValue("Administrar Usuarios");
item.setUrl("/clientapp/modules/admin/manage_users.xhtml");
submenu.addElement(item);
Upvotes: 1
Views: 5333
Reputation: 51
I respond myself.
To use menumodel you need a submenu that wraps (or contains) all menuitems or submenus with their own menuitems.
Menumodel
.mySubmenu
.Menuitems
and then add them to mySubmenu
.Submenu
objects (that can contains Menuitems
itself) an add to mySubMenu
.mySubmenu
that contains all MenuItem
and Submenu
items to
Menumodel
that created initially.Thanks Lamq, you help me to active my main. (And sorry for my english ::)
Upvotes: 1
Reputation: 1846
I create my menu like this :
Bean:
private MenuModel menumodel = new DefaultMenuModel();
//create the first menu item
DefaultMenuItem accueil = new DefaultMenuItem("Accueil");
accueil.setStyleClass("accueil");
accueil.setUrl("/accueil.jsf");
this.menumodel.addElement(accueil);
//Start here i create submenu with personal access for all user
for (Autorisation auto : this.permList) {
if (auto.getRessource().getSousMenu() != null) {
if (auto.getRessource().getSousMenu().size() != 0) {
//Create submenu
DefaultSubMenu submenu = new DefaultSubMenu();
submenu.setIcon(null);
submenu.setLabel(auto.getRessource().getMenu());
this.menumodel.addElement(submenu);
for (Ressource r : auto.getRessource().getSousMenu()) {
//Feed submenu with menu item
DefaultMenuItem item = new DefaultMenuItem();
item.setValue(r.getMenu());
item.setUrl(r.getPath());
submenu.addElement(item);
}
}
}
}
XHTML :
<p:menubar model="#{SessionUser.menumodel}"/>
Upvotes: 3