关于jsf:如何构建动态菜单

How to build a dynamic menu

嘿,我是使用 jsf 的新手,所以我想用从数据库加载的项目构建一个动态菜单,但我不确定我需要什么功能或如何为菜单构建支持 bean。我已经创建了数据库和三个表 Rol、User、Rol x User、Items。还有什么是项目表的好属性??.


每个 Rol 应该有 Items 所以你需要一个额外的表 ItemsXRol 我会为 Item 选择这些列: id, label, url, tooltip, father_item, level 类似的东西,当然你应该选择你的列来填充你的需要。

然后要创建菜单,使用 Primefaces 从数据库动态获取项目,您可以使用 MenuModel 对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//MenuBean
 model = new DefaultMenuModel();  

    //First submenu  
    DefaultSubMenu firstSubmenu = new DefaultSubMenu("Dynamic Submenu");  

    DefaultMenuItem item = new DefaultMenuItem("External");  
    item.setUrl("http://www.primefaces.org");  
    item.setIcon("ui-icon-home");  
    firstSubmenu.addElement(item);  

    model.addElement(firstSubmenu);  

    //Second submenu
    ...

然后在 .xhtml 文件中输入如下内容:

1
<p:menu model="#{menuBean.model}"/>

但是要生成从数据库中获取值的菜单,您可以使用 DAO 从您的实体中获取 MenuItems。

如果您的菜单具有 n 级格式,它可能会成为一种方便的递归方法来生成 MenuModel,您必须在其中迭代您的 Items 以创建第一级菜单,然后递归地创建每个父亲的孩子.

如果您想了解有关 MenuModel 的更多信息,请访问 https://www.primefaces.org/showcase/ui/menu/menu.xhtml


Primefaces 为您提供了一种使用 org.primefaces.model.menu.* 类动态构建菜单的编程方式。在托管 bean 中使用 MenuModel 并在 facelet 页面上引用它。示例:

1
2
3
4
5
6
7
8
9
10
public class MenuBean {  

    private MenuModel model;  

    public MenuBean() {
        // Build your menu here
    }

    // Gets and sets
}

在你的脸上:

1
<p:menu model="#{menuBean.model}"/>

更多细节:
http://www.primefaces.org/showcase/ui/menu.jsf