【问题标题】:JSF Primefaces multi level Dynamic menu from database来自数据库的 JSF Primefaces 多级动态菜单
【发布时间】:2015-03-12 01:42:12
【问题描述】:

我正在从数据库表生成菜单栏,我能够生成第一级子菜单,但我无法获取子菜单子项(项目)。 我找不到在primefaces上生成孩子的逻辑。 这是我查询的 sql 结果。有人可以帮忙解决吗?

这是我的第一级代码

//get menu options from database
ResultSet result =  ps.executeQuery();
        int parent=0; 
        DefaultSubMenu firstSubmenu = null;
 while(result.next()){
     int parent_id=result.getInt("parent_option_id");
     int suboption_id=result.getInt("sub_option_id");
     int subopt_nb=result.getInt("totalSubopt");

     if (result.getInt("parent_option_id")==0)
      {
      firstSubmenu = new DefaultSubMenu(result.getString("name"));


         DefaultMenuItem item = new              DefaultMenuItem(result.getString("name"));
         firstSubmenu.setStyleClass("parent"+suboption_id);
         firstSubmenu.setId("parent"+Integer.toString(suboption_id));
        item.setUrl(result.getString("url"));
        item.setIcon("ui-icon-home");

        firstSubmenu.addElement(item);

         menu.addElement(firstSubmenu);
       } 
   }

另一件事让我感到不安,setId 不起作用我尝试了很多示例但它没有呈现??

【问题讨论】:

    标签: jsf jsf-2 primefaces menu


    【解决方案1】:

    首先

    1. 编写一个返回父列表的数据库查询(选择 * 其中 parent_option_id 不为空)
    2. 迭代父母列表并为每个父母获取子列表(select * where parent_option_id = ?)

    这里是创建菜单和子菜单项的代码

    MenuModel menuModel = new DefaultMenuModel();
    

    对于 parent_option_Id 1

    DefaultSubMenu menu = new DefaultSubMenu(getParentName());
    menu.setLabel("name");
    

    对于 parent_option_id 1 的每个子项

    DefaultMenuItem resources = new DefaultMenuItem(getSubItemName());
    resources.setUrl("subItemUrl");
    menu.addElement(resources);
    

    在 subItems 列表的末尾(关闭 for 循环后) menuModel.addElement(menu);

    【讨论】:

    • 好的,这是 2 级菜单,但这里我有一个 3 级菜单,你知道如何创建一个条件,如果它有一个子菜单,如果没有,则创建一个默认子菜单
    • 好的,谢谢我从你的逻辑开始,我已经做到了,但是在我们的例子中,我们受限于知道级别的数量,如果有一天我们必须添加一个新级别,我们将有义务为新查询添加一个新的while循环。
    • 学习递归编程。在这种情况下效果很好
    猜你喜欢
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2015-07-06
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    相关资源
    最近更新 更多