package com.ewider.daisweb.resource.manager;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONObject;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang.StringUtils;
/**
* @author dengzhifeng
* @time 2009-1-7
*/
public class TreeHelper extends ChildrenMenuTree{
public static String getAllChildrenJSONTrees(List source, String treeid){
Tree tree = new Tree();
TreeHelper.getAllChildrenTrees(source, treeid, tree);
HashMap<String, Object> result=TreeHelper.transTree(tree);
JSONObject json = JSONObject.fromObject(result);
return json.toString();
}
/**
* 获取所有孩子树
*
* @param source
* @param treeid
* @param tree
* @return
*/
@SuppressWarnings("unchecked")
public static Tree getAllChildrenTrees(List source, String treeid, Tree tree) {
List directChildrenTrees = TreeHelper.getDirectChildrenTrees(source, treeid);
Map currentTree = TreeHelper.getTree(source, treeid);
Tree tmp = null;
if (StringUtils.isEmpty(tree.getId())) {
TreeHelper.MapToObject(tree, currentTree);
tmp = tree;
tmp.setPath(tree.getText());
} else {
Tree tmptree = new Tree();
TreeHelper.MapToObject(tmptree, currentTree);
tmp = new Tree(tmptree.getId(), tmptree.getText(),tree.getPath()+"."+tmptree.getText(),
tmptree.getUrl(),tmptree.getChecked(), tree);
}
Iterator it = directChildrenTrees.iterator();
while (it.hasNext()) {
Map item = (Map) it.next();
if (TreeHelper.isHaveParent(source, item)) {
TreeHelper.getAllChildrenTrees(source, item.get("id").toString(),
tmp);
} else {
// new Tree(currentTree.get("id").toString(), currentTree.get(
// "text").toString(), currentTree.get("url").toString(),
// tree);
Tree tmptree = new Tree();
TreeHelper.MapToObject(tmptree, currentTree);
tmp = new Tree(tmptree.getId(), tmptree.getText(),tree.getPath()+"."+tmptree.getText(),
tmptree.getUrl(),tmptree.getChecked(), tree);
}
}
return tree;
}
/**
* 把树转为json结构树
*
* @param tree
* @return
*/
public static HashMap<String, Object> transTree(Tree tree) {
HashMap<String, Object> value = new HashMap<String, Object>();
value.put("id", tree.getId());
value.put("text", tree.getText());
if(tree.getChecked().equalsIgnoreCase("true")){
value.put("checked", true);
}
if (tree.hasChilds()) {
List<HashMap<String, Object>> childs = new ArrayList<HashMap<String, Object>>();
Iterator<Tree> itr = tree.getChildIterator();
while (itr.hasNext()) {
Tree tmp = itr.next();
HashMap<String, Object> tmpv = TreeHelper
.transTree(tmp);
childs.add(tmpv);
}
value.put("children", childs);
} else {
value.put("leaf", true);
}
return value;
}
/**
* 判断是否有父结点
*
* @param source
* @param transedTree
* @return
*/
@SuppressWarnings("unchecked")
public static boolean isHaveParent(List source, Map transedTree) {
boolean result = false;
if (source.isEmpty() || source.size() < 1 || source == null
|| transedTree.isEmpty() || transedTree == null) {
return result;
} else {
if (transedTree.get("parentid") == null) {
result = false;
} else {
Map parentTree = TreeHelper.getTree(source, transedTree.get(
"parentid").toString());
if (null == parentTree || parentTree.isEmpty()) {
result = false;
} else {
if (source.contains(parentTree)) {
result = true;
} else {
result = false;
}
}
}
}
return result;
}
/**
* 获取所有的直接孩子结点
*
* @param source
* @param treeid
* @return
*/
@SuppressWarnings("unchecked")
public static List getDirectChildrenTrees(List source, String treeid) {
List result = new ArrayList();
Iterator it = source.iterator();
while (it.hasNext()) {
Map item = (Map) it.next();
if (item.get("parentid") != null) {
if (item.get("parentid").toString().equals(treeid)) {
result.add(item);
}
}
}
return result;
}
/**
* 获取结点本身
*
* @param source
* @param treeid
* @return
*/
@SuppressWarnings("unchecked")
public static Map getTree(List source, String treeid) {
Map result = null;
if (source.isEmpty() || source.size() < 1
|| StringUtils.isEmpty(treeid)) {
return null;
}
Iterator it = source.iterator();
while (it.hasNext()) {
Map item = (Map) it.next();
if (item.get("id").toString().equals(treeid)) {
result = item;
break;
}
}
return result;
}
private static void MapToObject(Object object, Map<String, String> map) {
JSONObject json = JSONObject.fromObject(map);
Object tempobject = JSONObject.toBean(json);
try {
BeanUtils.copyProperties(object, tempobject);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
在IT领域,特别是前端开发中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,它以其简洁和易于读写的特点广泛应用于数据传输。当我们需要构建一个树形展示的数据结构时,JSON树型表结构就显得尤为重要。EXT框架,作为一个强大的前端组件库,提供了丰富的UI控件,其中包括树形组件(EXT树),它能够根据JSON数据生成交互式的树状结构。 EXT树是EXT JS库中的一个组件,用于展示层级关系的数据,比如目录结构、组织架构等。在EXT中,我们可以利用JSON数据来构建树型结构,这样可以减少网络请求次数,提高页面加载速度。当查询一次数据库就能获取到完整的树型数据时,我们可以一次性将这些数据转化为JSON格式,然后传递给EXT树组件进行渲染。 在生成JSON树型表结构的过程中,我们需要注意以下几点: 1. JSON数据的格式:JSON对象通常包含键值对,用于表示树的节点。对于树型结构,每个节点至少包含两个键——`text`(显示的文本)和`children`(子节点数组)。例如: ```json { "text": "父节点", "children": [ { "text": "子节点1", "children": [] }, { "text": "子节点2", "children": [ { "text": "孙子节点", "children": [] } ] } ] } ``` 2. 构建树型数据:在后台处理中,可以通过SQL查询语句获取到层级关系的数据,然后将其转化为上述JSON格式。这通常涉及到递归操作,确保所有层级都被正确地表示出来。 3. 传递数据给EXT树:在前端,我们需要创建一个EXT树实例,并将JSON数据作为store的数据源。例如: ```javascript var treeStore = Ext.create('Ext.data.TreeStore', { root: { // JSON数据的根节点 expanded: true, children: [ /* 你的JSON数据 */ ] }, proxy: { type: 'memory', reader: { type: 'json' } } }); var treePanel = Ext.create('Ext.tree.Panel', { store: treeStore, rootVisible: false, // 是否显示根节点 // 其他配置项... }); ``` 4. TreeHelper类和Tree类:在提供的文件名列表中,"TreeHelper.java"和"Tree.java"可能分别代表一个辅助类和树结构的实现类。在Java环境中,`TreeHelper`可能包含了生成JSON树型数据的函数,而`Tree`类可能是用于处理和展示树型数据的核心组件。 生成JSON树型表结构是将层级数据转换为易于EXT树组件解析的格式,通过合理的数据库查询和后端处理,结合前端EXT框架,可以实现高效且美观的树形数据展示。这个过程涉及到数据结构、JSON序列化、前端UI组件等多个方面的知识,对于提升用户体验和优化应用性能具有重要意义。
















- 1

- 粉丝: 1068
- 资源: 31
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 广州美食评论数据集.zip
- C# WPF智慧工厂数据平台:基于MVVM的大数据分析与可视化实现
- NRCE-TEST-计算机二级资源
- L2_ebook-CCF-GESP资源
- LinkAndroid 是一个全能手机连接助手,方便快捷的连接 Android 和电脑,连接手机后可投屏、GIF/MP4录屏、截屏、文件管理、手机操作等功能
- 活动发布管理-活动资源
- 信捷触摸屏与士林变频器Modbus通讯实战指南:硬件接线、参数配置与故障排除
- kis-flow-活动资源
- interview-软考-网络工程师资源
- KeyMouseHook-活动资源
- 软件测试test06和软件测试test07-软件测试资源
- Linux Lab-linux开发资源
- 无人船路径跟踪控制:基于Fossen模型与ELOS+反步法的Matlab Simulink实现
- 中国通信行业用户行为数据.zip
- 基于蒙特卡洛法的电动汽车充电负荷预测:出行时间、行驶里程与充电时间的概率模型应用
- CA+:增强认知的咨询代理框架,用于长期动态客户参与



- 1
- 2
- 3
- 4
- 5
- 6
前往页