有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我试图用PrimeFaces 4.0使用defaultmenumodelpanelmenu实现编程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可以很好地显示一个项目和一个包含项目的子菜单

//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) 个答案

  1. # 1 楼答案

    我创建的菜单如下:

    豆子:

    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}"/>
    
  2. # 2 楼答案

    我自己回应

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

    1. 创建Menumodel
    2. 创建子菜单mySubmenu
    3. 创建一个或多个Menuitems,然后将它们添加到mySubmenu
    4. 创建一个或多个Submenu对象(可以包含Menuitems 本身)添加到mySubMenu
    5. 最后,将包含所有MenuItemSubmenu项的mySubmenu添加到 ^最初创建的{}

    谢谢Lamq,你帮我激活了我的主要功能。(对不起我的英语:)