我的使用struts menu动态从数据库建树型菜单设计
2005-01-10 16:44
411 查看
关于struts-menu,中文资源只有蓝色天空网站站长的两篇文章广为传播,在此表示感谢。1.“源码分析”见http://champion.ewuxi.com/old/opensource/struts-new/strutsmenu.htm2.“ibatis+少量代码动态建树“见 http://www.ewuxi.cn/ithome/develop/deve_languagedata/200406/489.html我们项目中用到几种树形菜单,如组织机构与部门,系统模块,这都是基于一张单表的,我自己花了一上午时间想了一个设计,很不成熟,希望大家告诉我哪里不妥,我改。使用struts-menu2.3 以及 ibatis2.0,另外,我还用到了spring,类图如下:设计思路:MeunRule很显然是一个策略模式,基于单表构造一棵树时,为满足开闭原则,易变的部分有两处,一是对应的sqlMap名称,另一个节点所附加的规则(包括url action target等),规则一般由节点id等自身信息决定,自然地,MenuRule就包括这两个部分,当然,如果你在表中已经详细记录了这些字段,就没有必要再作这一步工作了,我们的表设计中是不包括这些的。MenuTree类需要spring容器注入两个属性,一是menuDao,另一个是menuRule.很显示,一个类型的菜单对应一个MenuTree实例,在此类中主要的方法如下:
public MenuRepository getMenuRepository(Object paramObject){ MenuRepository repository = new MenuRepository(); List items = menuDao.getMenuItemList(menuRule.getSqlMapId(),paramObject); MenuItem item; for (int i=0;i<items.size(); i++){ item = (MenuItem)items.get(i); //规则解析 menuRule.processActionUrl(item); repository.addMenu(item.getMeun()); if (item.getParentName()!=null){ MenuComponent father = repository.getMenu(item.getParentName()); item.getMeun().setParent(father); } } return repository; }MenuItem这个类是MenuComponent的一个包装器,为了处理父子关系。最后,附上客户端调用的步骤: 1.创建具体的MenuRule子类,每一类型的树菜单一个; 2.在根配置文件中装配每一类型的TreeMeun对象,注入menuDao属性和menuRule属性; 3.要用系统的serviceLocater或上下文bean工厂类来产生TreeMenu实例,如 getTreeMenu(String menuLogicName) 。 4.调用treeMenu.getMenuRepository(Object param)来构造树 5.在struts action中,置给menuDisplayer属性,最后置入上下文环境供jsp页显示。(注:这一点感觉比较别扭) 因为使用了ibatis的缓存,从数据库中读这一部分的性能得到改善,节点数量不大,并发压力不大的情况下,先采取这种一次性读入的方案了。
相关文章推荐
- 我的使用struts menu动态从数据库建树型菜单设计
- 使用递归从数据库读取数据来动态建立菜单
- SolpartMenu的使用:(二)、在ASP.NET页面中使用SolpartMenu控件之动态的加载数据库中的数据来生成菜单
- 基于数据库的Struts Menu动态菜单分析
- 基于数据库的Struts Menu动态菜单分析
- TP支持菜单动态生成RBAC权限系统数据库结构设计方案
- C# 使用数据库和MenuStrip动态生成菜单
- 基于数据库的Struts Menu动态菜单分析
- 基于数据库的Struts Menu动态菜单分析
- 设计组织树 通过java拼接xml组织树 实现界面组织树 通过数据库配置动态决定菜单树显示与否、排列优先
- SolpartMenu的使用:(二)、在ASP.NET页面中使用SolpartMenu控件之动态的加载数据库中的数据来生成菜单
- 一种使用递归从数据库读取数据来动态建立菜单的方法
- 【设计模式】动态代理,附使用方法
- 使用设计模式构建通用数据库访问类
- 使用postgre数据库实现树形结构表的子-父级迭代查询,通过级联菜单简单举例
- [Jasper使用总结]iReport报表设计-动态列实现
- 不错的菜单,很好用,可以做成动态的,可以从数据库取值
- 使用silverlight构建一个工作流设计器(十四)(动态生成流程图片下载_下)
- 添加时动态的在页面生成表格,使用ajax异步在后台添加到数据库
- ZODB入门 -- 如何通过面向对象的动态语言 Python 使用对象数据库