基于jsTree的无限级树JSON数据的转换代码


Posted in Javascript onJuly 27, 2010

jstree 主页 :
http://www.jstree.com/

其中提供了一种从后台取数据渲染成树的形式:

$("#mytree").tree({ 
data : { 
type : "json", 
url : "${ctx}/user/power!list.do" 
} 
});

对于url中返回的值必须是它定义的json数据形式:
$("#demo2").tree({ 
data : { 
type : "json", 
json : [ 
{ attributes: { id : "pjson_1" }, state: "open", data: "Root node 1", children : [ 
{ attributes: { id : "pjson_2" }, data: { title : "Custom icon", icon : "../media/images/ok.png" } }, 
{ attributes: { id : "pjson_3" }, data: "Child node 2" }, 
{ attributes: { id : "pjson_4" }, data: "Some other child node" } 
]}, 
{ attributes: { id : "pjson_5" }, data: "Root node 2" } 
] 
} 
});

这里需要一个从后台实例集合转换为它规定的json数据的形式.
/** *//** 
* 无限递归获得jsTree的json字串 
* 
* @param parentId 
* 父权限id 
* @return 
*/ 
private String getJson(long parentId) 
{ 
// 把顶层的查出来 
List<Action> actions = actionManager.queryByParentId(parentId); 
for (int i = 0; i < actions.size(); i++) 
{ 
Action a = actions.get(i); 
// 有子节点 
if (a.getIshaschild() == 1) 
{ 
str += "{attributes:{id:\"" + a.getAnid() 
+ "\"},state:\"open\",data:\"" + a.getAnname() + "\" ,"; 
str += "children:["; 
// 查出它的子节点 
List<Action> list = actionManager.queryByParentId(a.getAnid()); 
// 遍历它的子节点 
for (int j = 0; j < list.size(); j++) 
{ 
Action ac = list.get(j); 
//还有子节点(递归调用) 
if (ac.getIshaschild() == 1) 
{ 
this.getJson(ac.getParentid()); 
} 
else 
{ str += "{attributes:{id:\"" + ac.getAnid() 
+ "\"},state:\"open\",data:\"" + ac.getAnname() 
+ "\" " + " }"; 
if (j < list.size() - 1) 
{ 
str += ","; 
} 
} 
} 
str += "]"; 
str += " }"; 
if (i < actions.size() - 1) 
{ 
str += ","; 
} 
} 
} 
return str; 
}

调用:
@org.apache.struts2.convention.annotation.Action(results = 
{ @Result(name = "success", location = "/main/user/action-list.jsp") }) 
public String list() 
{ 
String str = "["; 
// 从根开始 
str += this.getJson(0); 
str += "]"; 
this.renderJson(str); 
return null; 
}

其中Action是菜单类或权限类等的实体。
效果图:
基于jsTree的无限级树JSON数据的转换代码
Javascript 相关文章推荐
javascript 动态table添加colspan\rowspan 参数的方法
Jul 25 Javascript
javascript getElementsByName()的用法说明
Jul 31 Javascript
基于JQuery的多标签实现代码
Sep 19 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
Nov 23 Javascript
JS全局变量和局部变量最新解析
Jun 24 Javascript
jQuery事件处理的特征(事件命名机制)
Aug 23 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
Jan 17 Javascript
JSON对象转化为字符串详解
Aug 11 Javascript
详解vue-router 初始化时做了什么
Jun 11 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
May 31 Javascript
JointJS JavaScript流程图绘制框架解析
Aug 15 Javascript
构建一个JavaScript插件系统
Oct 20 Javascript
XENON基于JSON变种
Jul 27 #Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
Jul 26 #Javascript
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
Jul 26 #Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
Jul 26 #Javascript
JQuery的Validation插件中Remote验证的中文问题
Jul 26 #Javascript
基于JQuery的一句代码实现表格的简单筛选
Jul 26 #Javascript
jQuery getJSON 处理json数据的代码
Jul 26 #Javascript
You might like
php不使用copy()函数复制文件的方法
2015/03/13 PHP
php获取图片信息的方法详解
2015/12/10 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
2016/01/11 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
php日志函数error_log用法实例分析
2019/09/23 PHP
PHP如何使用JWT做Api接口身份认证的实现
2020/02/03 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
基于Bootstrap实现图片轮播效果
2016/05/22 Javascript
浅析JavaScript 箭头函数 generator Date JSON
2016/05/23 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
2017/09/11 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
微信小程序实现多行文字滚动
2020/11/18 Javascript
JS removeAttribute()方法实现删除元素的某个属性
2021/01/11 Javascript
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
python调用windows api锁定计算机示例
2014/04/17 Python
深入理解python中的浅拷贝和深拷贝
2016/05/30 Python
Python 模拟员工信息数据库操作的实例
2017/10/23 Python
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
Django安装配置mysql的方法步骤
2018/10/15 Python
Python面向对象基础入门之编码细节与注意事项
2018/12/11 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
HTML5 自动聚焦(autofocus)属性使用介绍
2013/08/07 HTML / CSS
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
青年文明号服务承诺
2014/03/31 职场文书
公益广告标语
2014/06/19 职场文书
庆六一文艺汇演活动方案
2014/08/26 职场文书
2015年女生节活动总结
2015/02/27 职场文书
python创建字典及相关管理操作
2022/04/13 Python