dtree.js树的例子--从数据库获取菜单(最下面附dtree.js用法说明)

1、页面
<%@ page import="com.zkhx.travel.common.Constant" %>
<%@ page import="com.zkhx.system.resource.proxy.ResManage" %>
<%@ page import="com.zkhx.system.users.model.User" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<%@ page contentType="text/html;charset=GBK" %>
<%
     User user= (User) session.getAttribute(Constant.CURRENT_USER);
    if (user == null) {
        out.print("<script>alert(\"操作超时,请重新登录\");</script>");
        out.print("<script>parent.location.href=\""+request.getContextPath()+"/index.jsp\";</script>");
        return;
    }
%>
<html>
<head>
    <title>左边菜单树</title>
    <link rel="StyleSheet" href="js/dtree.css" type="text/css"/>
    <script type="text/javascript" src="js/dtree.js"></script>
<link href="css/index.css" rel="stylesheet" type="text/css" />
<link href="css/public.css" rel="stylesheet" type="text/css"/>
</head>
<style type="text/css">
body {
    background-color: #680021;
    margin:0px;
    padding:0px;
}
a{ color:#FFFFFF; text-decoration:none; font-size:14px;}
a:hover{ color:#FFFFFF; text-decoration:underline; font-size:14px;}
</style>
<body >
 
<div class="dtree">
    <p style="color:#FFFFFF"><a href="javascript: d.openAll();">打开所有</a> | <a href="javascript: d.closeAll();">关闭所有</a></p>
    <script type="text/javascript">
        d = new dTree('d');
        <%
        ResManage me=new  ResManage();
        %>
        <%=me.getAllMenu(user.getUserId().toString(),null)%>
        document.write(d);
    </script>
</div>
</body>
</html>
 
 
 
2、后台代码
package com.zkhx.system.resource.proxy;
 
import org.hibernate.Query;
import org.hibernate.Session;
import com.longtech.util.HibernateSessionFactory;
import com.zkhx.system.resource.model.Resources;
import com.zkhx.system.users.model.Users;
import com.zkhx.system.users.proxy.UserManage;
import com.zkhx.util.SmartUtil;
 
import java.util.List;
 
public class ResManage {
     /**
     * 获取登陆用户所拥有的菜单树**
     */
    private String firstMenus = "";
    private StringBuffer subTree = new StringBuffer();
   
    public String getAllMenu(String user_id, String user_type) {
        StringBuffer menuStr = new StringBuffer();
        List<Object[]> menus = null;
        try {
            menus = getFirstMenu(user_id, user_type);
            menuStr.append(this.getFirstMenus());
            if (menus == null)
                return ("d.add(0,-1,'<b><a style=\"font-size:14px\" href=info.jsp target=mainFrame>假期管理</a></b>','','','mainFrame');");
            for (Object[] menu : menus) {
                        String menutress = getMenuTrees(user_id, menu[0].toString(), user_type).toString();
                        menuStr.append(menutress);
            }
        } catch (Exception e) {
            return ("d.add(0,-1,'<b><a style=\"font-size:14px\" href=info.jsp target=_mainFrame>假期管理</a></b>','','','mainFrame');");
        }
        return menuStr.toString();
    }
 
    // 输出第一层菜单
    public List<Object[]> getFirstMenu(String user_id, String user_type) {
        StringBuffer sbq = new StringBuffer("select a.resourceId,a.description,a.parentResourceId,a.resType,a.resourceName from Resources a where a.parentResourceId=0   order by a.resourceId");
        Session session = HibernateSessionFactory.currentSession();
        List<Object[]> allMenus = null;
        try {
            allMenus = session.createQuery(sbq.toString()).list();
            StringBuffer sb = new StringBuffer("d.add(0,-1,'<b><a style=\"font-size:14px\" href=info.jsp target=mainFrame>假期管理</a></b>','','','mainFrame');");
            UserManage um = new UserManage();
            Users user = um.get(SmartUtil.getLong(user_id));
            List list=null;
            StringBuffer sqb=new StringBuffer(" from Resources t where t.parentResourceId=0 ");
            sqb.append(" and t.resourceId in(select r.parentResourceId from Resources r where r.resourceId in("+user.getResourceIds()+"))");
            list=session.createQuery(sqb.toString()).list();
            Resources rs=null;
            for (Object[] menu : allMenus) {
                for (Object aList : list) {
                    rs = (Resources) aList;
                    if (rs.getResourceId().equals(SmartUtil.getLong(menu[0])))
                        sb.append("d.add(" + menu[0] + ",0,'" + menu[1] + "','','','mainFrame');");// d.add()
                }
            }
            this.setFirstMenus(sb.toString());//新的树方式。。
            return allMenus;
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
 
 
    }
 
    public String getFirstMenus() {
        return firstMenus;
    }
 
    public void setFirstMenus(String firstMenus) {
        this.firstMenus = firstMenus;
    }
 
    /**
     * 递归菜单树**
     */
    public StringBuffer getMenuTrees(String user_id, String menu_id, String user_type) {
        List<Object[]> menu = getChildMenus(user_id, menu_id, user_type);
        UserManage um = new UserManage();
        Users user = um.get(SmartUtil.getLong(user_id));
        String menuIds[] = null;
        if (user.getResourceIds() != null)
            menuIds = user.getResourceIds().split(",");
        if (menu != null) {
            for (Object[] me : menu) {
                for (String menuId : menuIds) {
                    if (SmartUtil.getLong(menuId).equals(SmartUtil.getLong(me[0]))) {
                        if (this.ifChildMenus(user_id, me[0].toString(), user_type) > 0) {
                            getMenuTrees(user_id, me[0].toString(), user_type);
                            subTree.append("d.add(" + me[0] + "," + me[2] + ",'" + me[1] + "','','','mainFrame');");// d.add()
                        } else {
                            subTree.append("d.add(" + me[0] + "," + me[2] + ",'" + me[1] + "','" + me[4] + "','','mainFrame');");// d.add()
                        }
                    }
                }
            }
        }
 
        return subTree;
 
 
    }
 
    /**
     * 根据上级菜单得到下级菜单**
     *
     * @throws java.sql.SQLException
     */
    public List<Object[]> getChildMenus(String user_id, String parent_id, String user_type) {
        StringBuffer sbq = new StringBuffer("select a.resourceId,a.description,a.parentResourceId,a.resType,a.resourceName from Resources a where  a.parentResourceId=" + parent_id + "  order by a.resourceId");
        List<Object[]> list = null;
        Session session = HibernateSessionFactory.currentSession();
        try {
            list = session.createQuery(sbq.toString()).list();
            return list;
 
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }
 
    /**
     * 是否有下级菜单**
     */
    public int ifChildMenus(String user_id, String parent_id, String user_type) {
        int i = 0;
        StringBuffer sbq = new StringBuffer("select a.resourceId,a.description,a.parentResourceId,a.resType,a.resourceName from Resources a where  a.parentResourceId=" + parent_id + "  order by a.resourceId");
        List list = null;
        Session session = HibernateSessionFactory.currentSession();
        try {
            list = session.createQuery(sbq.toString()).list();
            if (list != null) {
                i = list.size();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return i;
    }
}
 
附:
JS树目录-dtree(转载)

JS组件dtree轻松实现树型菜单:详细介绍应用dtree构建一个JavaScript树型菜单及其中参数配置说明

这个无限级可刷新Js树型菜单 dTree  
1、可设置无限级菜单  
2、不必使用框架  
3、可刷新,多页面内跳转不会影响菜单  
4、可限级创造子树  
5、支持目前主流浏览器:IE5,6,7  
6、节点图片可设置切换图片效果  


下载url:http://www.destroydrop.com/javascripts/tree/  
解压缩dtree.zip 包。  
dtree目录下包括这些文件:example01.html 、 dtree.js 、 api.html 、 dtree.css 和img目录       
注意:除了api.html之外,其它的文件都是必须拷贝的。api.html是dtree的函数介绍。  

打开example01.html文件  

     <link rel="StyleSheet" href="css/dtree.css" type="text/css" />   
     <script type="text/javascript" src="js/dtree.js"></script>   

必须引用的两个文件。  

生成树 节点的代码:  
      <script type="text/javascript">   
         <!--   

         d = new dTree(’d’);//创建一个树对象   

         d.add(0,-1,’My example tree’); //创建一个树对象   
         d.add(1,0,’Node 1’,’example01.html’);   
         d.add(2,0,’Node 2’,’example01.html’);   
         d.add(3,1,’Node 1.1’,’example01.html’);   
         d.add(4,0,’Node 3’,’example01.html’);   
         d.add(5,3,’Node 1.1.1’,’example01.html’);   
         d.add(6,5,’Node 1.1.1.1’,’example01.html’);   
         d.add(7,0,’Node 4’,’example01.html’);   
         d.add(8,1,’Node 1.2’,’example01.html’);   
         d.add(9,0,’My Pictures’,’example01.html’,’Pictures I\’ve taken over the years’,’’,’’,’img/imgfolder.gif’);   
         d.add(10,9,’The trip to Iceland’,’example01.html’,’Pictures of Gullfoss and Geysir’);   
         d.add(11,9,’Mom\’s birthday’,’example01.html’);   
         d.add(12,0,’Recycle Bin’,’example01.html’,’’,’’,’img/trash.gif’);   

         document.write(d);   

         //-->   
     </script>   

d.add(0,-1,’My example tree’);  
      这一句为树添加了一个根节点,显示名称为’My example tree’     d.add(1,0,’Node 1’,’example01.html’);  
     这一句在树的根节点下面添加了一个子节点。(d.add()方法的参数具体含义可参见api.html文件)       
常用的:       
第一个参数,表示当前节点的ID       
第二个参数,表示当前节点的父节点的ID,根节点的值为 -1      
第三个参数,节点要显示的文字       
第四个参数,节点的Url       
第五个参数,鼠标移至该节点时节点的Title       
第六个参数,节点的target  
第七个参数,用做节点的图标,节点没有指定图标时使用默认值  
第八个参数,用做节点打开的图标,节点没有指定图标时使用默认值  
第九个参数,判断节点是否打开  

附 rlog翻译:

属性菜单使用说明   

函数   

add()   
向树里添加一个节点   
只能在树被创建之前调用.   
必须 id, pid, name   
参数   
名字     类型     描述   
id     Number     唯一的ID号   
pid     Number     判定父节点的数字,根节点的值为 -1   
name     String     节点的文本标签   
url     String     节点的Url   
title     String     节点的Title   
target     String     节点的target   
icon     String     用做节点的图标,节点没有指定图标时使用默认值   
iconOpen     String     用做节点打开的图标,节点没有指定图标时使用默认值   
open     Boolean     判断节点是否打开   
例子   
mytree.add(1, 0, ’My node’, ’node.html’, ’node title’, ’mainframe’, ’img/musicfolder.gif’);   

openAll()   
打开所有节点   
可在树被创建以前或以后调用.   
例子   
mytree.openAll();   

closeAll()   
关闭所有节点   
可在树被创建以前或以后调用.   
例子   
mytree.closeAll();   

openTo()   
Opens the tree to a certain node and can also select the node.   
只能在树被创建以后调用..   
参数   
名字     类型     描述   
id     Number     节点唯一的ID号   
select     Boolean     判断节点是否被选择   
例子   
mytree.openTo(4, true);   

配置   
变量     类型     默认值     描述   
target     String     true     所有节点的target   
folderLinks     Boolean     true     文件夹可链接   
useSelection     Boolean     true     节点可被选择(高亮)   
useCookies     Boolean     true     树可以使用cookies记住状态   
useLines     Boolean     true     创建带线的树   
useIcons     Boolean     true     创建带有图标的树   
useStatusText     Boolean     false     用节点名替代显示在状态栏的节点url   
closeSameLevel     Boolean     false     只有一个有父级的节点可以被展开,当这个函数可用时openAll() 和 closeAll() 函数将不可用   
inOrder     Boolean     false     如果父级节点总是添加在子级节点之前,使用这个参数可以加速菜单显示.   
例子   
mytree.config.target = "mytarget";  

 

转载于:https://www.cnblogs.com/kaisheng0777/archive/2013/04/16/3023858.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值