Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF Primefaces数据库中的多级动态菜单_Jsf_Jsf 2_Primefaces_Menu - Fatal编程技术网

JSF Primefaces数据库中的多级动态菜单

JSF Primefaces数据库中的多级动态菜单,jsf,jsf-2,primefaces,menu,Jsf,Jsf 2,Primefaces,Menu,我正在从数据库表生成菜单栏,我能够生成第一级子菜单,但无法获取子菜单childsitems。 我找不到在素数面上生成child的逻辑。 这是我查询的sql结果。有人能帮我找到解决方案吗 这是我的第一代代码 //get menu options from database ResultSet result = ps.executeQuery(); int parent=0; DefaultSubMenu firstSubmenu = null; while(r

我正在从数据库表生成菜单栏,我能够生成第一级子菜单,但无法获取子菜单childsitems。 我找不到在素数面上生成child的逻辑。 这是我查询的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不起作用了。我尝试了很多例子,但它没有渲染???

首先

编写一个db查询,返回父项的列表select*,其中父项的选项id不为空 迭代父项列表,并为每个父项获取子项列表,选择*where parent_option_id=? 下面是创建菜单和子菜单项的代码

MenuModel menuModel = new DefaultMenuModel();
对于父项\u选项\u Id 1

DefaultSubMenu menu = new DefaultSubMenu(getParentName());
menu.setLabel("name");
对于父项\u选项\u id 1的每个子项

DefaultMenuItem resources = new DefaultMenuItem(getSubItemName());
resources.setUrl("subItemUrl");
menu.addElement(resources);
在关闭for循环后的子项列表末尾
menuModel.addElementmenu

好的,这是2级菜单,但这里我有一个3级菜单,如果它有一个子菜单和一个项目,你知道如何创建一个默认子菜单的条件吗?如果没有,谢谢,我从你的逻辑开始,我已经做了,但是在我们的情况下,我们受到了级别数量的限制,如果有一天我们不得不添加一个新的级别,我们有义务为新查询添加一个新的while循环。学习递归编程。在这种情况下效果很好