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

时间:2015-03-12 01:42:12

标签: jsf jsf-2 primefaces menu

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

enter image description here

这是我的第一代生成代码

//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无法正常工作我尝试了很多例子并且没有渲染?

1 个答案:

答案 0 :(得分:1)

首先

  1. 编写一个返回Parent列表的db查询(select * where parent_option_id不为null)
  2. 迭代父母列表,并为每个父母获取子项列表(select * where parent_option_id =?)
  3. 以下是创建菜单和子菜单项的代码

    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(菜单);