bootstrap ACE treeview json生成(Java)

因项目需要使用到TreeView的数据结构,前端框架使用bootstrap ACE 需要返回固定格式的JSON 数据,在java后台递归处理返回的json。。。如下:


{
"刑侦":
		{
			"text":"刑侦",
			"type":"folder",
			"additionalParameters":
				{
					"id":"1",
					"children":
						{
							"痕迹检验":
								{
									"text":"痕迹检验",
									"type":"item",
									"additionalParameters":{"id":"10"}},
							"刑侦光源":
								{
									"text":"刑侦光源",
									"type":"item",
									"additionalParameters":{"id":"11"}},
							"现场勘察":
								{
									"text":"现场勘察",
									"type":"item",
									"additionalParameters":{"id":"12"}},
							"反恐处突":
								{
									"text":"反恐处突",
									"type":"item",
									"additionalParameters":{"id":"13"}},
							"声像技术":
								{
									"text":"声像技术",
									"type":"item",
									"additionalParameters":{
										"id":"9",
										"children":{
											"三级菜单":{
												"text":"声像技术",
												"type":"item",
												"additionalParameters":{"id":"33"}
											}
										}
											}
								}
						}
				}
		},
"交警":
		{
			"text":"交警",
			"type":"folder",
			"additionalParameters":
				{
					"id":"32",
					"children":
						{
							"交通事故":{"text":"交通事故","type":"item","additionalParameters":{"id":"33"}},
							"交通道理管理":{"text":"交通道理管理","type":"item","additionalParameters":{"id":"34"}}
						}
				}
		} 
}

数据库结构如下:(是递归表即可)

创建对应POJO实体类如下:

package com.lkk.po;


/**
 * @author 作者 DCT:
 * @version 创建时间:2018年11月5日 下午5:00:13
 * 类说明
 */
public class TblKnowledgeTemplate {

		/**
		 * ID
		 */
		private String intKnowledgeTemplateID;
	
		/**
		 * 父节点
		 */
		private String intParentID;
		
		/**
		 * 模板名称
		 */
		private String name;

		/**
		 * 检查所见
		 */
		private String nodeValue;
		
		/**
		 * 检查结论
		 */
		private String nonce;
		
		/**
		 * 类型
		 */
		private String strType;
		
		public String getIntParentID() {
			return intParentID;
		}

		public void setIntParentID(String intParentID) {
			this.intParentID = intParentID;
		}
		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public String getNodeValue() {
			return nodeValue;
		}

		public void setNodeValue(String nodeValue) {
			this.nodeValue = nodeValue;
		}

		public String getNonce() {
			return nonce;
		}

		public void setNonce(String nonce) {
			this.nonce = nonce;
		}

		public String getStrType() {
			return strType;
		}

		public void setStrType(String strType) {
			this.strType = strType;
		}

		 
		public String getIntKnowledgeTemplateID() {
			return intKnowledgeTemplateID;
		}

		public void setIntKnowledgeTemplateID(String intKnowledgeTemplateID) {
			this.intKnowledgeTemplateID = intKnowledgeTemplateID;
		}
		
}

根据json样式,我们需要创建两个javabean

package com.lkk.po.tree;

import java.util.Map;

/**
 * @author 作者 DCT:
 * @version 创建时间:2018年11月7日 上午9:40:47
 * 类说明
 */
public class AdditionalParameters {
	/**
	 * node id
	 */
	private String id;
	
	/**
	 * subnode ifno
	 */
	private Map<String,Item> children;
	
	/**
	 * node chosen
	 */
	 
	private boolean itemSelected ;
 
	
	public String getId( )
	{
		return id;
	}
 
	
	public void setId( String id )
	{
		this.id = id;
	}
 
	
	
	public Map<String, Item> getChildren( )
	{
		return children;
	}
 
 
	
	public void setChildren( Map<String, Item> children )
	{
		this.children = children;
	}
 
 
	public boolean isItemSelected( )
	{
		return itemSelected;
	}
 
	
	public void setItemSelected( boolean itemSelected )
	{
		this.itemSelected = itemSelected;
	}
 
}
package com.lkk.po.tree;
/**
 * @author 作者 DCT:
 * @version 创建时间:2018年11月7日 上午9:32:44
 * 类说明
 */
public class Item {
	/**
	 * name
	 */
	private String name;
	
	/**
	 * type
	 */
	private String type;
	
	private String nodeValue;
	
	private String nonce;
	
	/**
	 * node parameters info and subnode info
	 */
	private AdditionalParameters additionalParameters;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getNodeValue() {
		return nodeValue;
	}

	public void setNodeValue(String nodeValue) {
		this.nodeValue = nodeValue;
	}

	public String getNonce() {
		return nonce;
	}

	public void setNonce(String nonce) {
		this.nonce = nonce;
	}

	public AdditionalParameters getAdditionalParameters() {
		return additionalParameters;
	}

	public void setAdditionalParameters(AdditionalParameters additionalParameters) {
		this.additionalParameters = additionalParameters;
	}
 
	
	
}

controller 中的业务代码如下:


    
private void getChildNodes( Map<String,Item> items, String parentId,String type )
	{
	
	
		List<TblKnowledgeTemplate> permissions=getChildPermissions( parentId,type );
		if(permissions.size()>0){
			for ( TblKnowledgeTemplate permission : permissions )
			{
				//递归子节点
				Item item=new Item( );
				item.setName(permission.getName());
				item.setType("folder");
				getChildItems(item,permission.getIntKnowledgeTemplateID().toString(),permission.getName(),type);
				items.put(permission.getName(),item);
			}
		}
		
	}
	
/**
	 * 获取子项
	 * @param item 当前节点
	 * @param parentId 当前节点的父ID
	 * @param parentName 节点名称
	 * @param type 节点类型
	 */
    private void getChildItems( Item item, String parentId,String parentName,String type )
	{
		List<TblKnowledgeTemplate> childPermissions = getChildPermissions( parentId,type );
		if(childPermissions.size( )>0){
			//父节点为“folder”
			item.setName(parentName);
			item.setType( "folder" );
			AdditionalParameters additionalParameters=new AdditionalParameters( );
			additionalParameters.setId( parentId );
			Map<String, Item> children=new LinkedHashMap<>( );
			for ( TblKnowledgeTemplate childPermission : childPermissions )
			{
				Item item2=new Item( );
				getChildItems( item2, childPermission.getIntKnowledgeTemplateID().toString( ),childPermission.getName(),type);
				children.put( childPermission.getName( ), item2 );
			}
			additionalParameters.setChildren( children );
			item.setAdditionalParameters( additionalParameters );
			
		}else{
			//父节点为“item”,获取当前
			item.setName(parentName);
			item.setType("item" );
			AdditionalParameters additionalParameters=new AdditionalParameters( );
			additionalParameters.setId( parentId );
			item.setAdditionalParameters( additionalParameters );
		}
		
		
	}
 
    /**
     * 根据节点parentId和类型查询子节点
     * @param parentId 当前节点的父ID
	 * @param type 节点类型
     * @return
     */
	private List<TblKnowledgeTemplate> getChildPermissions( String parentId ,String type)
	{ 
		List<TblKnowledgeTemplate> permissions = tblKnowledgeTemplateService.queryChildById( parentId ,type);
		return permissions;
	} 

效果图如下:

 

 

感谢这位博主

参考了以下文章:

https://blog.csdn.net/nofarewells/article/details/50687366

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想在bootstrapTable中使用json数据,你需要确保json数据满足以下要求: 1. 数据格式为json数组,每个元素代表一行数据。 2. 每个元素是一个json对象,对象的属性名对应表格的列名,属性值对应表格的单元格内容。 下面是一个示例json数据: ```json [ { "id": 1, "name": "John", "age": 30, "gender": "male" }, { "id": 2, "name": "Jane", "age": 25, "gender": "female" }, { "id": 3, "name": "Bob", "age": 40, "gender": "male" } ] ``` 在后台,你可以将数据查询出来,然后转换成json格式,最后返回给前端。如果你使用Java语言,可以使用Gson库将对象转换成json字符串,例如: ```java List<User> userList = userService.getUserList(); Gson gson = new Gson(); String json = gson.toJson(userList); return json; ``` 这里假设User是一个JavaBean类,包含了用户的id、姓名、年龄和性别等属性。getUserList()方法返回一个包含了多个User对象的集合。toJson()方法将集合转换成json字符串。最后在Controller中将json字符串返回给前端即可。 在前端,你需要在bootstrapTable的配置中指定数据来源,例如: ```javascript $('#table').bootstrapTable({ url: '/user/list', // 后台返回json数据的url method: 'get', pagination: true, sidePagination: 'client', columns: [ { field: 'id', title: 'ID' }, { field: 'name', title: '姓名' }, { field: 'age', title: '年龄' }, { field: 'gender', title: '性别' } ] }); ``` 这里的url指定了后台返回json数据的url,method指定了请求方法(get或post),pagination指定了是否启用分页功能,sidePagination指定了分页方式(client或server),columns指定了表格的列名和对应的json属性名。 当bootstrapTable加载完成后,会向后台发送一个get请求,后台返回json数据。bootstrapTable根据配置将json数据解析成表格展示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值