bootstrap ACE treeview json生成

最近在做权限管理,前台使用的是基于bootstrap的ACE框架,前端的权限树使用的是ACE 改造过的treeview,需要的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"}}
						}
				}
		}
}

前端的html源码就不贴了,找前端工程师很快搞定,这里主要贴后台的java代码

我的数据库设计:

CREATE TABLE `t_permission` (
  `permission_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '权限编号',
  `permission_name` varchar(255) NOT NULL COMMENT '权限名称,唯一',
  `permission_key` varchar(255) NOT NULL COMMENT '权限字符串',
  `url` varchar(255) DEFAULT NULL COMMENT 'URL链接',
  `pid` bigint(20) DEFAULT NULL COMMENT '父级权限编号',
  `type` int(1) NOT NULL DEFAULT '1' COMMENT '1表示菜单,2表示按钮',
  `description` varchar(255) DEFAULT NULL COMMENT '描述',
  `creation` datetime DEFAULT NULL COMMENT '创建时间',
  `last_update` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`permission_id`)
)


创建对应的POJO

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

public class Item
{
	/**
	 * node name
	 */
	private String text;
	
	/**
	 * node type:'folder' or 'item'
	 */
	private String type;
	
	/**
	 * node parameters info and subnode info
	 */
	private AdditionalParameters additionalParameters;

	
	public String getText( )
	{
		return text;
	}

	
	public void setText( String text )
	{
		this.text = text;
	}

	
	public String getType( )
	{
		return type;
	}

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

	
	public AdditionalParameters getAdditionalParameters( )
	{
		return additionalParameters;
	}

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

public class AdditionalParameters
{
	/**
	 * node id
	 */
	private String id;
	
	/**
	 * subnode ifno
	 */
	private Map<String,Item> children;
	
	/**
	 * node chosen
	 */
	@JsonProperty(value="item-selected")
	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;
	}
	
	
}
一个常量类

public class ItemType {
	
	public static final String NODE_FOLDER="folder";
	
	public static final String NODE_ITEM="item";
}


核心方法:

public Result queryAllMenusAsTree( )
	{
		Map<String,Item> items = new LinkedHashMap<>( );
		getChildNodes(items, "0" );
		Result result=new Result( 200, "", items );
		return result;
	}

private void getChildNodes( Map<String,Item> items, String parentId )
	{
		List<Permission> permissions=getChildPermissions( parentId );
		if(permissions.size( )>0){
			for ( Permission permission : permissions )
			{
				//递归子节点
				Item item=new Item( );
				item.setText( permission.getPermissionName( ) );
				item.setType( ItemType.NODE_FOLDER );
				getChildItems(item,permission.getPermissionId( ).toString( ),permission.getPermissionName( ));
				items.put( permission.getPermissionName( ), item );
			}
		}
		
	}
	
private void getChildItems( Item item, String parentId,String parentName )
	{
		List<Permission> childPermissions = getChildPermissions( parentId );
		if(childPermissions.size( )>0){
			//父节点为“folder”
			item.setText(parentName);
			item.setType( ItemType.NODE_FOLDER );
			AdditionalParameters additionalParameters=new AdditionalParameters( );
			additionalParameters.setId( parentId );
			Map<String, Item> children=new LinkedHashMap<>( );
			for ( Permission childPermission : childPermissions )
			{
				Item item2=new Item( );
				getChildItems( item2, childPermission.getPermissionId( ).toString( ),childPermission.getPermissionName( ) );
				children.put( childPermission.getPermissionName( ), item2 );
			}
			additionalParameters.setChildren( children );
			item.setAdditionalParameters( additionalParameters );
			
		}else{
			//父节点为“item”,获取当前
			item.setText(parentName);
			item.setType( ItemType.NODE_ITEM );
			AdditionalParameters additionalParameters=new AdditionalParameters( );
			additionalParameters.setId( parentId );
			item.setAdditionalParameters( additionalParameters );
		}
		
		
	}

private List<Permission> getChildPermissions( String parentId )
	{
		Example example = new Example( Permission.class );
		example.createCriteria( ).andEqualTo( "pid", parentId );
		List<Permission> permissions = permissionMapper.selectByExample( example );
		return permissions;
	}

花了不少时间,主要是树结构的递归遍历

大概的写写,做一下记录,以备以后思考



参考了以下文章:

http://blog.csdn.net/a786132874/article/details/43019287



  • 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、付费专栏及课程。

余额充值