2014-03-01 15 views
1

我试图使用PrimeFaces 4.0使用defaultmenumodelpanelmenu来实现编程panelmenu。问题是当我实现一个简单模型时,包含一个或多个菜单项的一个或多个子菜单运行正常。但是当我实现包含菜单字幕的子菜单和包含另一个菜单项的更多子菜单时,defaultmenumodel不显示所有级别。如何使用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 

的菜单项与*当页面呈现 我如何能实现使用DefaultMenuModel和菜单的这些模型未显示? 我想用pojo来保存数据库中的菜单结构进行管理。 谢谢

(已增加/已编辑) 我已经运行下一个代码建议,但不能使用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); 

回答

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

我认为这是很好的解决方案我会尝试使用您是否尝试过使用? – user2248409

+0

我刚刚运行代码,它与很好地工作,但不与名为“accueil”的第一个项目显示在菜单栏中,但不显示在panelmenu中。任何建议?这是panelMenu中的一个错误? – user2248409

+0

你必须创建自己的menuitem并将其添加到menumodel –

1

我回应自己。

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

  1. 创建Menumodel
  2. 创建子菜单mySubmenu
  3. 创建一个或多个Menuitems,然后将它们添加到mySubmenu
  4. 创建一个或多个​​对象(可以包含Menuitems 本身)一个添加到mySubMenu
  5. 最后加上mySubmenu,其中包含所有MenuItem和​​项目到 Menumodel最初创建。

谢谢Lamq,你帮我活跃我的主力。 (对不起,我的英语:) :)

+0

认为编辑您的答案发布代码示例,并验证这可以帮助其他人。别客气。 –

相关问题