user2248409
user2248409

Reputation: 51

How to implement programmatic menu with panelmenu and defaultmenumodel

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

Answers (2)

user2248409
user2248409

Reputation: 51

I respond myself.

To use menumodel you need a submenu that wraps (or contains) all menuitems or submenus with their own menuitems.

  1. Create Menumodel.
  2. Create Submenu mySubmenu.
  3. Create one or more Menuitems and then add them to mySubmenu.
  4. Create one or more Submenu objects (that can contains Menuitems itself) an add to mySubMenu.
  5. finally add 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

Joffrey Hernandez
Joffrey Hernandez

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

Related Questions