如何使用panelmenu和defaultmenumodel实现编程菜单

时间:2014-03-01 19:56:20

标签: java primefaces menuitem submenu

我尝试使用PrimeFaces 4.0使用panelmenudefaultmenumodel实现编程panelmenu。问题是当我实现一个简单的模型时,一个或多个子菜单包含一个或多个菜单项运行正常。但是当我实现包含菜单项的子菜单和包含其他菜单项的更多子菜单时,defaultmenumodel不会显示所有级别。

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 

呈现页面时未显示*的MenuItem 如何使用DefaultMenuModel实现这些菜单模型? 我想使用pojo来保存DataBase中的菜单结构以进行管理。 感谢

(已添加/已编辑) 我已经运行了下一个代码建议,但没有使用p:panelMenu。使用p:menuBAr可以很好地显示一个Item和一个带有项目的SubMenu。

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

2 个答案:

答案 0 :(得分:3)

我创建了这样的菜单:

豆:

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}"/>

答案 1 :(得分:1)

我回应自己。

要使用menumodel,您需要一个子菜单,用自己的菜单项包装(或包含)所有菜单项或子菜单。

  1. 创建Menumodel
  2. 创建子菜单mySubmenu
  3. 创建一个或多个Menuitems,然后将其添加到mySubmenu
  4. 创建一个或多个Submenu个对象(可包含Menuitems 本身)添加到mySubMenu
  5. 最后添加包含所有mySubmenuMenuItem项的Submenu 最初创建的Menumodel
  6. 谢谢Lamq ,你帮助我积极主动。 (抱歉我的英文::)

相关问题