1

我想问如何使用递归函数从数据库生成菜单模型。我已经上了这门课,但它不起作用。请帮助我,我已经找到并尝试了一周。谢谢

public class MenuDAOImpl extends ManagerBase<MenuMaster> implements MenuDAO {

    private List<MenuMaster> list;
    private List<MenuData> datas;

    @Override
    public MenuModel getMenu() {
        MenuModel model = new DefaultMenuModel();
        String[] orders = new String[]{"id"};
        try {
            list = getBySQLQuery("PARENT_MENU_ID=0", orders, 1000);
            for (MenuMaster menuMaster : list) {
                menuChild(menuMaster);
            }
        } catch (Exception e) {
        }
        return model;
        // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    private List<MenuData> menuChild(MenuMaster master) {
        List<MenuData> listChild = new ArrayList<MenuData>();
        String[] orders = new String[]{"id"};
        try {
            MenuData data = new MenuData();
            data.mm = master;
            data.mms = getBySQLQuery("PARENT_MENU_ID=" + master.getParentMenuId(), orders, 1000);
            listChild.add(data);
        } catch (Exception e) {
        }
        return listChild;
    }

    public class MenuData {

        private MenuMaster mm;
        private List<MenuMaster> mms;

        public MenuData() {
        }

        public MenuMaster getMm() {
            return mm;
        }

        public void setMm(MenuMaster mm) {
            this.mm = mm;
        }

        public List<MenuMaster> getMms() {
            return mms;
        }

        public void setMms(List<MenuMaster> mms) {
            this.mms = mms;
        }
    }
}

这是我的数据库表(抱歉我不能上传图片)

身份证 | 菜单名称 | DISPLAY_NAME | 网址 |PARENT_MENU_ID |
1 | 员工 | 员工 | /employee.xhtml | 0 |
2 | 员工菜单| 员工 | /employee.xhtml | 1 |
3 | 实用程序 | 实用程序 | | 0 |
7 | 阿斯达夫 | 阿斯达夫 | | 6 |
6 | 实用菜单 | 测试 | | 3 |
5 | 实用数据 | 管理员配置 | 阿斯达夫 | 3 |
4 | 菜单 | 菜单编辑器 | /utility/menu.xhtml | 3 |

4

1 回答 1

0

这是我周围的一些代码,我通过将子菜单和菜单项附加到他的 getChildren() 属性来创建菜单模型

private MenuModel model;

public MenuModel getModel() {

    if(model != null) return model;

    model = new DefaultMenuModel();
    addDynamicMenus();

    return model;
}

private void addDynamicMenus(){

    if(modules == null){
        modules = service.getModulesByUserLogin(loginBean.getUsername());
    }

    Submenu currfather = null;

    for(SpFeModuleForUser s : modules){

        if(currfather == null || (!currfather.getId().equals("menu_" + s.getModuleID()))){
            currfather = new Submenu();
              currfather.setLabel(Modules.getSingleton().getString(s.getModuleName()));
            currfather.setId("menu_"+s.getModuleID());
            model.addSubmenu(currfather);
        }

        MenuItem mi = new MenuItem();

        mi.setValue(Modules.getSingleton().getString(s.getNAME()));
        mi.setId("_" + s.getKey());
        mi.setTarget("_self");
        mi.setTitle(Modules.getSingleton().getString(s.getNAME() + "_Description"));
        mi.setAjax(false);
        mi.setUrl(url);
        // Add parameters
        UIParameter param = new UIParameter();
        param.setName("moduleid");
        param.setValue(s.getKey());
        mi.getChildren().add(param);

        mi.setProcess("@all");
        currfather.getChildren().add(mi);
    }
}
于 2013-04-24T18:09:42.950 回答