前段时间工作中需要使用树,这一点,在前台用ext很好实现,只是这个tree的store的这个json在后台拼写的时候有些费了我的脑筋,下面总结一下,我发现很好用的一个方法:
(哦,亲们,这些代码里,数据是从不同数据源获得的,所以在代码里体现了切换数据源的代码,如果你不需要切换数据源,没有必要这个做哦,只需要看sql的组成和返回list就行了。)
sql:
public List FindComboTreeDataBySubjectId(String subjectId, List<String> paramList,List constantValue) {
//权限表的数据及主题
String pmsSql = reportPermissionService.getPmsSql(constantValue);
Subject pmsSubject = reportPermissionService.getPmsSubject();
Subject subject = this.subjectDomainService.getSubject(subjectId);
if(subject==null||"".equals(subject)){
return new ArrayList();
}
String subTable = subject.getSubTable();
String ds = subject.getDataSource().toString();
// 切换到给定的数据源
HotSwappableTargetSource swapper = (HotSwappableTargetSource)app.getBean("swappableDataSource");
DataSource dataSource = (DataSource)app.getBean(ds);
swapper.swap(dataSource);
// 查询元数据
List result = new ArrayList();
String sql = "SELECT ID AS COMPANYID, ID,PID,NAME,NODETYPE,YEARMONTH FROM "+subTable+" WHERE 1=1 ";
if(pmsSubject !=null && pmsSubject.getDataSource().toString().equals(ds) && pmsSql !=""){
sql = "SELECT T.ID AS COMPANYID,T.ID,T.PID,T.NAME,T.NODETYPE,T.YEARMONTH, DECODE(PMS.ID,NULL,0,1) AS PERMIS FROM "+subTable + " T LEFT JOIN" + pmsSql + " ON T.ID = PMS.ID WHERE 1=1 ";
}
if(paramList != null){
Iterator paramItem = paramList.iterator();
while(paramItem.hasNext()){
String param = paramItem.next().toString();
if(!"".equals(param)||param!="")
sql +=" and "+param+" ";
}
}
sql = "SELECT T.*,LEVEL FROM ("+ sql + ")T start with t.pid is null connect by prior t.id = t.PID order by level,T.NAME desc";
SQLQuery query = getSession().createSQLQuery(sql);
List list = query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
return list;
}
json
public String FindTreeDataBySubjectId(String subjectId,List<String> paramList,List constantValue){
List list=componentDataDomainService.FindComboTreeDataBySubjectId(subjectId, paramList,constantValue);
String treeString=getChildren(list,"");
if("".equals(treeString)||treeString==""){
treeString="";
}else{
treeString=treeString.replace("children:[,", "children:[");
treeString=treeString.substring(1, treeString.length());//去掉第一个逗号
}
treeString="{companyId:'0',id:'0',text:'无',expanded:'true',children:["+treeString+"]}";
return treeString;
}
/**
* 根据树列表,递归返返回树结构
* @param list 数据列表
* @param pId父级节点
* @return :D :D :D :D
* @DATE:2012-8-31 @TIME: 下午14:20:58
*/
@SuppressWarnings("rawtypes")
private String getChildren(List list,String pId){
StringBuffer treeStore = new StringBuffer();
for(int i=0;i<list.size();i++){
Map company = (Map)list.get(i);
String _pId = "";
if(company.get("PID")!=null){
_pId = company.get("PID").toString();
}
if(_pId.equals(pId)){
//1.输出自己
treeStore.append(",{companyId:'").append(company.get("COMPANYID").toString()).append("'")
.append(",id:'").append(company.get("ID").toString()).append("'")
.append(",text:'").append(company.get("NAME").toString()).append("'")
.append(",nodeType:'").append(company.get("NODETYPE").toString()).append("'")
.append(",disabled:").append((company.get("PERMIS").toString().equals("1"))?false:true)
.append(",iconCls:'").append("icon-company").append("'");
if(company.get("LEVEL").toString().equals("1")){
treeStore.append(",expanded:'true'");
}else{
treeStore.append(",expanded:'false'");
}
treeStore.append(",children:[");
//2.调用递归
treeStore.append(getChildren(list,company.get("ID").toString())+"]}");
}
}
return treeStore.append("").toString();
}
分享到:
相关推荐
通过解析Json数据生成树状结构 1、使用newtonsoft.json解析json 2、无限级 3、父子节点联动
在IT行业中,JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。在C++编程中,处理JSON数据时,我们经常使用库来帮助我们进行解析和序列化。...
以上就是关于"Table2JSONTree_C#根据TABLE产生JSON树_jsontree2table_"的相关知识点,涵盖了从C#操作数据库,到生成JSON,再到前端展示的整个流程。希望这些信息对你理解和实践这个过程有所帮助。
2. JavaScript解析JSON:在JavaScript中,`JSON.parse()`方法用于将JSON字符串转换为JavaScript对象。例如: ```javascript let jsonString = '{"name":"John", "age":30, "city":"New York"}'; let jsonObject =...
JSON(JavaScript Object Notation)是轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Ext Tree中,JSON通常作为数据源,用于传递树节点的信息,包括节点ID、文本、子节点等。服务器端返回...
在Java环境中,`TreeHelper`可能包含了生成JSON树型数据的函数,而`Tree`类可能是用于处理和展示树型数据的核心组件。 总的来说,生成JSON树型表结构是将层级数据转换为易于EXT树组件解析的格式,通过合理的数据库...
"ext tree json 例子(不含EXT包)"这个标题暗示我们将讨论如何在不直接引用EXT完整包的情况下,仅使用EXT JS中关于TreePanel和JSON解析的部分来构建一个动态的树形结构。这可能涉及到手动引入EXT的核心组件,如...
在后台数据交互中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。 **1. Ext Tree Panel** Ext Tree Panel是Ext JS中的一个核心组件,用于展示树...
9. **与其他工具的交互**:JSON Schema生成的模型可以与各种工具协同工作,如代码生成器(将Schema转换为Java、JavaScript等语言的类定义),数据验证器(验证JSON数据是否符合Schema),以及文档生成工具(自动生成...
它们可能实现了上述的一些或全部步骤,比如`TreeClass.asp`可能包含了数据库连接和查询的类定义,而`Tree.asp`可能是一个实例化并使用这个类来生成和输出JSON的脚本。为了深入理解这两个文件的具体功能,需要查看...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Vue JSON Tree View中,我们需要将待展示的数据转换为JSON格式,以便插件可以正确解析和渲染。 3...
基于aceadmin1.4编写,其它版本稍做改动即可使用,需要先引入aceadmin相应的tree.min.js,使用时只需要传入带id、pId的json数组,自动生成上下级多层关系的树,可直接从后端取数返回json,引入此js后,调用:aceTree...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在这个案例中,每个城市作为一个对象,可能包含属性如“name”(城市名称)、“id”(唯一标识)、...
总的来说,"json jquery simple tree 源码"提供了一种高效、灵活的方法,使得jQuery Simple Tree能够利用JSON数据进行异步加载,提升了用户体验,简化了前后端的数据交互过程,是Web开发中一个实用的工具。
在实际开发中,我们经常需要将普通的JSON数据转换为TreeGrid能够识别的格式,以便正确地渲染出树状表格。下面我们将详细探讨如何实现这一过程。 首先,EasyUI TreeGrid需要的JSON数据结构通常包含以下元素: 1. **...
`json格式数据`则是用于驱动这个Tree组件的数据源,因为JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。 博客链接虽然没有提供具体内容,但在实际...
JSON的数据格式简单明了,易于人类阅读和编写,同时也易于机器解析和生成。 将XML数据转换为JSON的过程通常涉及以下几个步骤: 1. 解析XML:首先,你需要解析XML文档,提取出所有的元素、属性和内容。这可以通过...
标题中的“JsonTree: 进一步封装cJSON”意味着这个项目是基于cJSON库进行了一层包装,以提供更方便的API和功能。cJSON是一个轻量级的JSON解析器和生成器,常用于C语言环境。JsonTree的创建是为了简化在C语言中处理...
ExtJS Tree + JSON + Struts2 示例源代码详解 在Web开发中,构建交互式的用户界面是关键。ExtJS是一个强大的JavaScript库,尤其擅长创建桌面级的Web应用。本示例将详细介绍如何结合ExtJS的Tree组件、JSON数据格式...
2. **JSON (JavaScript Object Notation)**: JSON 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在本例中,服务器端的Struts2框架将数据转换成JSON格式,然后发送到前端。ExtJS Tree...