bootstrap ACE treeview json生成(Java)
阿新 • • 發佈:2018-12-19
因專案需要使用到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;
}
效果圖如下:
感謝這位博主
參考了以下文章: