extjs递归算法生成树
2014-02-28 13:01
204 查看
java中的代码,与数据库层主要是两个方法,一个是查询节点,一个是查询子节点。然后形成树形结构,这里主要重写了tree的store,让树子节点加载更多的信息,下面是java中的代码。
/** * 递归算法解析成树形结构 * * @param cid * @return * @author jiangyi */ public JSONTreeNode recursiveTree(String cid,String index_name,List areadimensions,List timedimensions) { //当前节点信息 List list = categoryService.queryCategory(cid); JSONTreeNode node = new JSONTreeNode(); //子节点信息 List childTreeNodes = categoryService.hasChildNode(cid); //这个节点下所有指标 List treelist = indexService.queryIndexTreeByDimednsionName(null,getTreeLeaf(cid),index_name); if(list!=null&&list.size()>0&&treelist!=null&&treelist.size()>0){ DM_IND_CATEGORY_INFO DM_IND_CATEGORY_INFO = (DM_IND_CATEGORY_INFO)list.get(0); node.setId(DM_IND_CATEGORY_INFO.getUuid()); node.setText(DM_IND_CATEGORY_INFO.getCategory_name()+treelist.size()); if (childTreeNodes!=null&&childTreeNodes.size()>0) { node.setLeaf(false); }else{ node.setLeaf(true); } //遍历子节点 if(childTreeNodes!=null){ for(int i=0;i<childTreeNodes.size();i++){ DM_IND_CATEGORY_INFO child = (DM_IND_CATEGORY_INFO)childTreeNodes.get(i); JSONTreeNode n = recursiveTree(child.getUuid(),index_name,areadimensions,timedimensions); //递归 if(!"0".equals(n.getDescription())){ node.getChildren().add(n); } } } }else{ node.setDescription("0"); } //加一层维度信息 if(node.isLeaf()){ node.setLeaf(false); for(int i=0;i<areadimensions.size();i++){ boolean flag = false; DM_IND_DIMENSION_DETAIL areadimension = (DM_IND_DIMENSION_DETAIL)areadimensions.get(i); JSONTreeNode areanode = new JSONTreeNode(); areanode.setId(node.getId()+areadimension.getUuid()); areanode.setLeaf(false); int size = 0; for(int j=0;j<timedimensions.size();j++){ DM_IND_DIMENSION_DETAIL timedimension = (DM_IND_DIMENSION_DETAIL)timedimensions.get(j); //增加指标 String dimension_name = timedimension.getUuid() + "-" + areadimension.getUuid(); List treelist1 = indexService.queryIndexTreeByDimednsionName(dimension_name,node.getId(),index_name); if(treelist1!=null&&treelist1.size()>0){ size += treelist1.size(); flag = true; JSONTreeNode timenode = new JSONTreeNode(); timenode.setId(node.getId()+areadimension.getUuid()+timedimension.getUuid()); timenode.setText(timedimension.getDimension_name()+treelist1.size()); timenode.setLeaf(false); for(int k=0;k<treelist1.size();k++){ JSONObject json = (JSONObject)treelist1.get(k); JSONTreeNode indexnode = new JSONTreeNode(); indexnode.setId(node.getId()+"-"+json.getString("sub_index_id")); indexnode.setText(json.getString("index_name")); indexnode.setLeaf(true); timenode.getChildren().add(indexnode); } areanode.getChildren().add(timenode); } } areanode.setText(areadimension.getDimension_name()+size); //判断这个分类下面没有指标 if(flag){ node.getChildren().add(areanode); } } } return node; } /** * 得到这个节点下面的所有的叶子节点 * @param cid * @return * @author jiangyi */ public List getTreeLeaf(String cid) { List relList = new ArrayList(); relList.add(cid); List list = categoryService.queryCategory(cid); if(list!=null&&list.size()>0){ DM_IND_CATEGORY_INFO DM_IND_CATEGORY_INFO = (DM_IND_CATEGORY_INFO)list.get(0); List childTreeNodes = categoryService.hasChildNode(cid); if (childTreeNodes!=null&&childTreeNodes.size()>0) { }else{ relList.add(DM_IND_CATEGORY_INFO.getUuid()); } //遍历子节点 if(childTreeNodes!=null){ for(int i=0;i<childTreeNodes.size();i++){ DM_IND_CATEGORY_INFO child = (DM_IND_CATEGORY_INFO)childTreeNodes.get(i); List n = getTreeLeaf(child.getUuid()); //递归 relList.addAll(n); } } } return relList; }js中就比较简单了。
var categoryStore = Ext.create('Ext.data.TreeStore', { autoLoad : false, proxy : { type : 'ajax', url : eastcom.baseURL+'/inas_kpimanage_index/queryIndexTree', reader : { type : 'json' }, actionMethods : { read : 'POST' } } }); var categoryTree = Ext.create('Ext.tree.Panel', { id : 'categoryTree', tbar:Ext.create('Ext.toolbar.Toolbar',{items:['指标名称','->',queryIndexAction]}), rootVisible : false, useArrows : true, store : categoryStore, listeners : { 'itemclick' : function(view, record, items, index, e) { var obj = record; var array = obj.data.id.split("-"); var sub_index_id = array[1]; if(obj.data.leaf == true){ Ext.getCmp('id_sub_index_id').setValue(obj.data.id); Ext.Ajax.request({ url : eastcom.baseURL + '/inas_kpimanage_index/querySubIndex', method : 'POST', params : { sub_index_id : sub_index_id }, success : function(form, action) { var result = Ext.JSON.decode(form.responseText); Ext.getCmp('addDbMetaAction').enable(); var o = result.data; //列表中显示信息 Ext.getCmp('id_sub_index_id').setValue(sub_index_id); Ext.getCmp('id_index_last_version').setValue(o.index_last_version); if(o.time_delay == ''){ Ext.getCmp('id_time_delay').setValue(0); }else{ Ext.getCmp('id_time_delay').setValue( o.time_delay); } Ext.getCmp('id_delay_desc').setValue( o.delay_desc); if(o.is_calculation == '1'){ Ext.getCmp('id_index_algorithm').show(); Ext.getCmp('id_is_calculation').setValue( o.is_calculation); Ext.getCmp('id_index_algorithm').setValue( o.index_algorithm); }else{ Ext.getCmp('id_index_algorithm').hide(); Ext.getCmp('id_is_calculation').setValue('0'); } var dbdatalabelshow = o.dbdatalabel; var store= Ext.getCmp('rightGridPanel').getStore(); store.removeAll(); if(dbdatalabelshow != null && dbdatalabelshow != ''){ var array = dbdatalabelshow.split(';'); for(var i=0;i<array.length;i++){ var array1 = array[i].split(','); var r = Ext.create('gridtableModel', { uuid : array1[0], table_name: array1[1], field_id: array1[2] }); store.insert(0, r); } } } }); } } } });
相关文章推荐
- 上传图片生成缩略图
- .net根据模板生成Word文件
- Hibernate3的DetachedCriteria支持-构造动态生成SQL语句
- 随机数生成c++(转)
- 利用JQUERY的TREEVIEW插件生成无限极树
- android无法自动生成R文件
- [phpcms二次开发]phpcms生成栏目出错,转到模版页面
- php生成标准化的excel——PHPExcel常用方法汇总
- 在Struts2框架下生成二维码图片
- python ——numpy各函数简介之生成数组函数(Array creation routines)
- AWR报告生成
- 反距离权重法生成DEM(利用KD-tree实现KNN算法)
- Android原生生成JSON与解析JSON
- C/C++ 使用rand()组合形式生成大于15位的随机数时存在的问题
- 最小生成树Minimum Spanning Tree
- Spark中组件Mllib的学习14之从文本中读取带标签的数据,生成带label的向量
- 实战演练:用gulp+EJS像CMS那样生成完整新闻内容面
- MyEclipse中怎么快速生成get和set函数
- dotnet new 命令使用模板生成Angular应用