基于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 相关文章推荐
一个小型js框架myJSFrame附API使用帮助
Jun 28 Javascript
jQuery动态添加 input type=file的实现代码
Jun 14 Javascript
jquery的each方法使用示例分享
Mar 25 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
Apr 10 Javascript
Node.js的特点和应用场景介绍
Nov 04 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
Feb 28 Javascript
Three.js学习之文字形状及自定义形状
Aug 01 Javascript
浅谈vue,angular,react数据双向绑定原理分析
Nov 28 Javascript
js断点调试经验分享
Dec 08 Javascript
对vue 键盘回车事件的实例讲解
Aug 25 Javascript
webpack打包非模块化js的方法
Oct 24 Javascript
JavaScript设计模式之命令模式实例分析
Jan 16 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获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
Yii的Srbac插件用法详解
2016/07/14 PHP
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
jQuery Mobile 和 Kendo UI 的比较
2016/05/05 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
浅谈基于Vue.js的移动组件库cube-ui
2017/12/20 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
Python中表示字符串的三种方法
2017/09/06 Python
Python 文件数据读写的具体实现
2020/01/24 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
pycharm解决关闭flask后依旧可以访问服务的问题
2020/04/03 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
纯DOM+CSS3实现简单的小风车动画
2016/09/27 HTML / CSS
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
优秀演讲稿范文
2013/12/29 职场文书
2014小学植树节活动总结
2014/03/10 职场文书
意向协议书范本
2014/04/23 职场文书
学校师德承诺书
2014/05/23 职场文书
房屋租赁授权委托书范本
2014/09/20 职场文书
开业庆典活动策划方案
2014/09/21 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
党员个人自我评价
2015/03/03 职场文书
工程技术员岗位职责
2015/04/11 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
Python time库的时间时钟处理
2021/05/02 Python
Python图片验证码降噪和8邻域降噪
2021/08/30 Python
Go 中的空白标识符下划线
2022/03/25 Golang