文档章节

Java数据库菜单形成jsontree

struggle_yw
 struggle_yw
发布于 2017/08/15 11:40
字数 336
阅读 6
收藏 0

分享一个工具类

    /** 
 * Json字符串工具类 
 *  
 * @author yanwei 
 * remind:所有顶级菜单的pid为0才能正常迭代出对应的树
 */  
public class JsonTree {  
    
    /** 
     * 根据id,pid和树要显示的属性生成树的Json字符串 ,字符串没有中括号,因为牵扯递归调用,不方便处理
     *  
     * @param <T> 
     * @param objs 
     * @param pidAttr 
     * @param idAttr 
     * @return 
     * @throws Exception 
     */  
    public static <T> String treeJson(long pid , List<T> objs, StringBuilder builder, String pidAttr, 
            String idAttr,String name) throws Exception {  
        if (objs.size() == 0){  
            return "{\"children\":[]}";  
        }  
        for(Iterator<T> iter = objs.iterator(); iter.hasNext();) {  
            T t = iter.next();  
            long id = getLong(t, idAttr);  
            long temp_pid = getLong(t, pidAttr);  
            String label = getValue(t, name);  
            if(pid == Long.MAX_VALUE){  
                break;  
            }  
            if(temp_pid == pid){  
                builder.append("{\"id\":\"").append(id).append("\",");  
                builder.append("\"name\":\"").append(label).append("\",");
                if(isHasChildren(id, objs, pidAttr)) {  
                    builder.append("\"children\":[");  
                    treeJson(id, objs, builder, pidAttr, idAttr,name);  
                    builder.append("]},");  
                }else{
                     builder.append("\"children\":[");  
                     builder.append("],");
                    builder.deleteCharAt(builder.length() - 1).append("},");  
                }  
            }  
        }  
        if(builder.length()>=1){
            builder.deleteCharAt(builder.length() - 1);  
        }
        return builder.toString();  
    }

}

// 该方法给定一个id,一个list,判断是否包含子节点

private static <T> boolean isHasChildren(long id , List<T> objs, String pidAttr) throws Exception{  
        for(T t : objs){  
            long pid = getLong(t, pidAttr);  
            if(pid == id){  
                return true;  
            }  
        }  
        return false;  
    }  
      //利用反射,执行对象的方法,获取值
    private static <T> long getLong(T t, String attrName) throws Exception {  
        Field field = t.getClass().getDeclaredField(attrName);  
        if (!field.isAccessible()) {  
            field.setAccessible(true);  
        }  
        Object value = field.get(t);  
        if (value == null){  
            return Long.MAX_VALUE;  
        }else{  
            return Long.parseLong(value.toString());  
        }  
    }  
  //获取属性值,一般属性
    private static <T> String getValue(T t, String attrName) throws Exception {  
        Field field = t.getClass().getDeclaredField(attrName);  
        if (!field.isAccessible()) {  
            field.setAccessible(true);  
        }  
        Object value = field.get(t);  
        if (value == null){  
            return "\"\"";  
        }else{  
            return value.toString();  
        }  
    }  

© 著作权归作者所有

struggle_yw
粉丝 0
博文 1
码字总数 336
作品 0
青岛
私信 提问
PowerDesigner 16.5 连接MySQL和逆向工程图

1、MySQL数据库连接(JDBC方式) JDBC的配置方式需要一些基础的环境和准备,但是也很简单,无非也就是JDK和mysql的连接jar包,这里不再展开阐述。 1.1 新建一个pdm,dbms选择mysql 1.2 Datab...

Gibbons
2018/07/22
2.6K
0
6.1 Java vs php 优缺点、适用类型

1、上手难度比较 php易学易懂,非技术的人,稍稍学习,可以上手,环境搭建用LAMP/WAMP一键安装包,常见开发工具,phpstorm。 Java则要求理解,Java语法和核心架构(jar包)以及JVM,环境配置也...

产品经理的技术课堂
2018/05/20
0
0
hibernate反向工程 (eclipse和myeclipse)(转)

hibernate反向工程 (eclipse和myeclipse) 如何提取数据库的模式信息,想通过hibernate的反向工具尝试下。 一、myeclipse下hibernate反向工程: 1、选择myeclipse hibernate视图 2、建立与后...

随智阔
2014/03/21
69
0
powerdesigner连接Mysql数据库

此次使用Mysql8.0和powerdesigner16.5 1、新建一个pdm 这里有个疑问,本人的mysql的版本是8.0,但如下图DBMS里最高只有mysql5.0,但以后没什么影响,所以未深究。 2、点击菜单栏里database,...

jxlgzwh
03/26
62
0
REST 风格的 Web 服务入门

要学习本教程,您需要具备以下软件和资源。 软件或资源 要求的版本 NetBeans IDE Java EE 下载包 Java 开发工具包 (JDK) 版本 6 或 7 符合 Java EE 规范的应用服务器 Oracle WebLogic Server...

颜建海
2014/03/25
441
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
15
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
16
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部