detree的使用心得
在执行d.add操作时
添加的一级菜单的顺序,决定了一级菜单的显示顺序
由于add操作的第2个参数,决定了谁是它的上级菜单,
所以不论一级菜单的子菜单在哪添加的,都能自动添加到对应的上一层的一级菜单中
但是add二级子菜单的顺序,也会影响到在一级菜单下的显示顺序
d = new dTree('d');
d.add(0,-1,'My example tree');
d.add(12,0,'note 6','example01.html');
d.add(9,0,'note 5','example01.html');
d.add(1,0,'Node 1','example01.html');
d.add(2,0,'Node 2','example01.html');
d.add(8,1,'note 1 第2个二级菜单','example01.html');
d.add(3,1,'note 1 第1个二级菜单','example01.html');
d.add(4,0,'Node 3','example01.html');
d.add(5,3,'第1个三级菜单','example01.html');
d.add(6,5,'第1个四级菜单','example01.html');
d.add(7,0,'Node 4','example01.html');
d.add(11,9,'note 5 第2个二级菜单','example01.html');
d.add(10,9,'note 5 第1个二级级菜单','example01.html');
document.write(d);
add的参数设置情况
第几个参数 参数别名 类型 功能
1 id int 节点自身的id(唯一)
2 pid int 节点的父节点id
3 name string 节点显示在页面上的名称
4 url string 节点的链接地址
5 title string 鼠标放在节点上显示的提示信息
6 target string 节点链接所打开的目标frame
7 icon string 节点关闭状态时显示的图标
8 iconOpen string 节点打开状态时显示的图标
9 open boolean 节点第一次加载是否打开
后台的菜单权限查询

public List<?> getMenuListByUserId(String empId) { //根据登录用户的id,查找到当前雇员 Employee emp = (Employee) this.getObject(Employee.class, empId); //如果是管理员,查出所有的菜单, 返回 /** * 这里的排序很重要, 决定了各级菜单显示顺序 * 在Menu菜单中有一个属性 mnOrder,对应于数据库表的mn_order字段,mn_order字段的值是数字,0,1,2,3,5,6... * 在一级菜单中的mn_order可以使用数字0,1,2,3,4,5...在二级菜单中也可以使用数字0,1,2,3,4,5... * 所有的菜单按照mn_order进行升序 排序,是表面上看着 一级菜单,二级菜单,三级菜单...菜单顺序是乱的 * 这些菜单都是从0,1,2,3...这样的顺序排的,各级菜单掺杂在了一起 * * 对应detree而言 , * 1. 因为add操作的第二个参数指定了当前菜单的上级菜单,所有各级菜单都会找到各自的上级菜单,菜单显示的结果表面上只是显示一级菜单,认为最初的显示的是一级菜单 * * 2. 由于一级菜单通过mn_order进行升序排序,所有一级菜单会按照自己的mn_order指定的数值大小进行显示,如果mn_order的数值变了,一级菜单显示顺序也就变了 * * 3. 对应一级菜单下面的二级菜单而言,不论二级菜单在哪定义的,都会找到自己的上级(即一级菜单)菜单,由于二级菜单也通过mn_order进行了排序, * mn_order的顺序就决定了一级菜单下面二级菜单的显示顺序 */ if ("y".equals(emp.getIsAdmin())) { return this.findObjects("From Menu order by mnOrder"); } String roleMnIds = ""; //如果不是管理员,获取当前用户的所有角色,每个角色对应着不同的菜单,进而查出当前用户能看到的所有的菜单的id for (Object obj : emp.getRoles()) { Role role = (Role) obj; for (Object o : role.getMenus()) { Menu m = (Menu) o; roleMnIds += "'" + m.getMnId() + "',"; } } if (roleMnIds.equals("")) { return null; } roleMnIds = roleMnIds.substring(0, roleMnIds.length() - 1); //根据菜单的id,查出所有的菜单的list //这里排序order by mnOrder ,解释和上面的解释一样,很重要 return this.findObjects("From Menu where mnId in(" + roleMnIds + ") order by mnOrder"); }
前台的代码显示:

<script type="text/javascript"> <!-- d = new dTree('d'); var isShow = true; <s:if test="#request.menuList.size > 50"> isShow = false; </s:if> <s:iterator value="#request.menuList" id="obj" status="st"> d.add('<s:property value="#obj.mnId"/>','<s:property value="#obj.parentMenu.mnId"/>','<s:property value="#obj.mnName"/>','<s:property value="#obj.mnUrl"/>','<s:property value="#obj.mnUrl"/>','contentFrame','','',isShow); </s:iterator> document.write(d); //--> </script>
menu菜单表设计:
欢迎转载,转载请注明文章出处:http://www.cnblogs.com/wanggd