所谓好记性不如烂笔头,为了以防忘记,才写下这篇博客,废话不多。。

异步树:

  tips:     可以采用easyui里的原始数据格式,也可以采用扁平化的数据格式。

  使用场景: 当菜单模块数量庞大或者无限极,最好使用异步树,单节点展开访问后台,返回对应的子菜单。

  必须要件: 只需要一个URL即可

前台核心JS:

    <script type="text/javascript">
    $(function(){
        $('#tt').tree({
            url: 'MenuSynServlet',
            lines:true/* ,
             onLoadSuccess : function(node, data) {
                var t = $(this);
                if (data) {
                    $(data).each(function(index, d) {

                        if (this.state == 'closed') {
                        t.tree('expandAll');
                        }
                    });
                }
            } */
        });
    });
    </script>

如果菜单比较少,也可以用异步树一次性加载 全部展开,把onLoadSuccess这段注释打开即可

后台Servlet:

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        String key = req.getParameter("id");
        DbUtil db= new DbUtil();
        Connection conn = null;
        List<EasyuiTreeNode> tree = new ArrayList<EasyuiTreeNode>();
        if(StringUtil.isEmpty(key)){

            try {
                 conn = db.getCon();
                 PreparedStatement ps = conn.prepareStatement("SELECT id,title FROM db_menus WHERE pid = 0");
                 ResultSet rs= ps.executeQuery();
                 while(rs.next()){
                     EasyuiTreeNode node = new EasyuiTreeNode();
                     node.setId(rs.getString("id"));
                     node.setState(existsText(conn,rs.getString("id"))? "closed":"open");
                     //如果想默认都是以文件夹形式显示,这样设置:node.setState("closed");
                     node.setTitle(rs.getString("title"));
                     tree.add(node);
                 }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }else{
            try {
                 conn = db.getCon();
                 PreparedStatement ps = conn.prepareStatement("SELECT id,title FROM db_menus WHERE pid = ?");
                 ps.setString(1, key);
                 ResultSet rs= ps.executeQuery();
                 while(rs.next()){
                     EasyuiTreeNode node = new EasyuiTreeNode();
                     node.setId(rs.getString("id"));
                     node.setState((existsText(conn,key)? "open":"closed"));
                     node.setTitle(rs.getString("title"));
                     tree.add(node);
                 }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        String json = JSON.toJSONString(tree);
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out=resp.getWriter();
        out.println(json);
        out.flush();
        out.close();
    }
    private boolean existsText(Connection conn,String pid) throws SQLException{
        PreparedStatement ps = conn.prepareStatement("SELECT COUNT(1) num FROM db_menus WHERE pid = ?");
        boolean isClosed = true;
        ps.setString(1, pid);
        ResultSet rs = ps.executeQuery();
        if(rs.next()){
            String count = rs.getString("num");
            if("0".equals(count)){
                isClosed = false;
            }
        }
        return isClosed;
    }

}

同步树:

  tips:这里采用扁平化的json格式实现,easyui tree 模仿ztree 使用扁平化加载json 原文链接:http://www.cnblogs.com/liaojie970/p/5319252.html

  使用场景:菜单模块少 可以采用(PS:跟异步树一次性加载区别在于:同步树一次性加载 请求post一次,异步树因为采用了递归展开,请求post N次)

  必须条件:数据格式要配制成ztree的数据格式(id,pid)

前台JS代码:

    <script type="text/javascript" src="<%=basePath%>/js/jquery-easyui-1.5.1/plugins/jquery.tree_expand.js"></script>

    <script type="text/javascript">
    //实例化。这里增加了三个属性,可以指定idFiled,textFiled和parentField。所以这里的simpleData可以不严格转换成tree的数据格式。
    $(function(){
        $('#tt').tree({
            url: 'MenuSynServlet',
            parentField:"pid",
            textFiled:"title",
            idFiled:"id",
            lines:true
        });
    });
    </script>

后台Servlet代码:

@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        //String key = req.getParameter("id");
        DbUtil db= new DbUtil();
        Connection conn = null;
        List<EasyuiTreeNode> tree = new ArrayList<EasyuiTreeNode>();

            try {
                 conn = db.getCon();
                 PreparedStatement ps = conn.prepareStatement("SELECT id,pid,title FROM db_menus");
                 ResultSet rs= ps.executeQuery();
                 while(rs.next()){
                     EasyuiTreeNode node = new EasyuiTreeNode();
                     node.setId(rs.getString("id"));
                     node.setPid(rs.getString("pid"));
                     node.setState(existsText(conn,rs.getString("id"))? "closed":"open");
                     //如果想默认都是以文件夹形式显示,这样设置:node.setState("closed");
                     node.setTitle(rs.getString("title"));
                     tree.add(node);
                 }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        String json = JSON.toJSONString(tree);
        System.out.println(json);
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out=resp.getWriter();
        out.println(json);
        out.flush();
        out.close();
    }
    private boolean existsText(Connection conn,String pid) throws SQLException{
        PreparedStatement ps = conn.prepareStatement("SELECT COUNT(1) num FROM db_menus WHERE pid = ?");
        boolean isClosed = true;
        ps.setString(1, pid);
        ResultSet rs = ps.executeQuery();
        if(rs.next()){
            String count = rs.getString("num");
            if("0".equals(count)){
                isClosed = false;
            }
        }
        return isClosed;
    }

附上数据脚本:

CREATE TABLE db_menus(
id ) NOT NULL AUTO_INCREMENT,
pid ) NOT NULL,
title ) DEFAULT NULL,
url ) DEFAULT NULL,
PRIMARY KEY (id )
)ENGINE=INNODB  DEFAULT CHARSET=utf8 COMMENT='菜单表'
DROP TABLE db_menus

,'项目管理',NULL);
,'任务管理',NULL);
,'考勤管理',NULL);
,'报销管理',NULL);
,'绩效管理',NULL);
,'通讯录管理',NULL);

,'个人周报查询',NULL);
,'项目周报查询',NULL);
,'个人周报填写',NULL);
,'项目周报填写',NULL);
,'我的任务',NULL);
,'指定任务',NULL);
,'派出申请',NULL);
,'加班申请',NULL);
,'请假申请',NULL);
,'我的报销',NULL);
,'报销审批',NULL);
,'绩效考核填报',NULL);
,'绩效考核审核',NULL);
,'通讯录',NULL);

EasyUI tree 异步树与采用扁平化实现的同步树的更多相关文章

  1. spring mvc easyui tree 异步加载树

    使用spring mvc 注解 异步加载一棵树 jsp: <ul id="orgInfoTree"></ul> $(function(){ loadOrgT ...

  2. jquery easyui tree异步加载子节点

    easyui中的树可以从标记中建立,也可以通过指定一个URL属性读取数据建立.如果想建立一棵异步树,需要为每个节点指定一个id属性值,这样在加载数据时会自动向后台传递id参数. <ul id=& ...

  3. MVC4中EasyUI Tree异步加载JSON数据生成树

      1,首先构造tree接受的格式化数据结构MODEL /// <summary> /// 定义EasyUI树的相关数据,方便控制器生成Json数据进行传递 /// </summar ...

  4. 16个时髦的扁平化设计的 HTML5 & CSS3 网站模板

    创建网站最好办法之一是使用现成的网站模板或使用开源 CMS 应用程序.所以,今天这篇文章给大家带来的是16款基于 HTML5 & CSS3 的精美的扁平风格网站模板,大家可以借助这些优秀的网站 ...

  5. [转]easyui tree 模仿ztree 使用扁平化加载json

    原文地址:http://my.oschina.net/acitiviti/blog/349377 参考文章:http://www.jeasyuicn.com/demo/treeloadfilter.h ...

  6. 数据网格和树-EasyUI Datagrid 数据网格、EasyUI Propertygrid 属性网格、EasyUI Tree 树、EasyUI Treegrid 树形网格

    EasyUI Datagrid 数据网格 扩展自 $.fn.panel.defaults.通过 $.fn.datagrid.defaults 重写默认的 defaults. 数据网格(datagrid ...

  7. 【EasyUI学习-2】Easyui Tree的异步加载

    作者:ssslinppp       1. 摘要 2. tree的相关介绍 3. 异步加载tree数据,并实现tree的折叠展开 3.1 功能说明: 3.2 前台代码 3.3 后台代码 4. 其他 1 ...

  8. EasyUI Tree 树

    转自:http://www.jeasyui.net/plugins/185.html 通过 $.fn.tree.defaults 重写默认的 defaults. 树(tree)在网页中以树形结构显示分 ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(50)-Easyui 扁平化皮肤

    最近抽了点时间仿做了点皮肤,只供欣赏!扁平化

随机推荐

  1. spring 数据源JNDI 基于tomcat mysql配置

    关键代码 <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean&q ...

  2. ETL全量单表同步简述

    ETL全量单表同步简述 1. 实现需求 当原数据库的表有新增.更新.删除操作时,将改动数据同步到目标库对应的数据表. 2. 设计思路 设计总体流程图如下: 注意点: 1.数据库合并时,选择正确的数据源 ...

  3. maven bug之Maven:Non-resolvable parent POM: Failure to find错误

    使用Maven编译淘宝的TimeTunnel项目时遇到如下错误: [INFO] Scanning for projects...[ERROR] The build could not read 1 p ...

  4. Mysql入门实战中

    前面一章主要解说了mysql的入门学习.包括数据库,表的管理,以及对数据的增删改,本章主要介绍mysql最重要的语句select的使用方法.将select的大部分使用方法进行分别解说. 全部代码下载( ...

  5. Windows下如何查看当前登录用户

    1.通过whoami命令查看 2.通过username变量查看,具体命令如下:echo %username% 上述两种方法只能查看当前会话用户信息,那么如何看到其他登录用户呢? 可以通过执行query ...

  6. Android GMS无法通过网络定位

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载.但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  7. Django打造大型企业官网(一)

    一.nvm的安装 (1)下载:nvm1.16 (2)安装完成后添加环境变量 C:\Users\Administrator\AppData\Roaming\nvm (3)修改settings.txt,将 ...

  8. ASP.NET MVC不可或缺的部分——DI(IOC)容器及控制器重构的剖析

    ASP.NET MVC不可或缺的部分——DI(IOC)容器及控制器重构的剖析   IoC框架最本质的东西:反射或者EMIT来实例化对象.然后我们可以加上缓存,或者一些策略来控制对象的生命周期,比如是否 ...

  9. 向海量用户发送数据哪家最强?上QDN下载LTE Broadcast SDK!

    情境一: 在一个数万人的体育场内.作为一名观众你非常难看清运动员的面容.假设有了4G手机.你能够非常easy的打开直播应用.一边看直播讲解,一边体验现场气氛.但令人尴尬的是,现场几万人同一时候须要观看 ...

  10. Android实现多个倒计时优化与源代码分析

    由于之前有个项目需求是须要时时刻去更新UI倒计时,之前想到的,这简单嘛,用计时或者Handler就能够搞定,并且性能也不错,可是需求要ListView,什么,?大量的View都须要,那Handle处理 ...