后台如何拼接easyUI tree格式的 json数据 构建动态树

来源:互联网 发布:ld3320语音识别算法 编辑:程序博客网 时间:2024/06/05 15:21

1.首先,对应easyuiapi创建一个EasyUITree的实体对象
这里写图片描述

/** * 封装easyUI树的节点信息 * @author peis * */public class EasyUITree {    //节点ID,对加载远程数据很重要。    private String id;    //显示节点文本    private String text;    //节点状态,'open' 或 'closed',默认:'open'。如果为'closed'的时候,将不自动展开该节点。    private String state;    //表示该节点是否被选中。    private boolean checked;    //被添加到节点的自定义属性。    private JsonElement  attributes;    //一个节点数组声明了若干节点。    private  List<EasyUITree> children = new ArrayList<EasyUITree>();    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getText() {        return text;    }    public void setText(String text) {        this.text = text;    }    public String getState() {        return state;    }    public void setState(String state) {        this.state = state;    }    public boolean isChecked() {        return checked;    }    public void setChecked(boolean checked) {        this.checked = checked;    }    public JsonElement getAttributes() {        return attributes;    }    public void setAttributes(JsonElement attributes) {        this.attributes = attributes;    }    public List<EasyUITree> getChildren() {        return children;    }    public void setChildren(List<EasyUITree> children) {        this.children = children;    }    public String toJson(){        return EasyUITreeGsonBuilder.INSTANCE.create().toJson(this);    }    public JsonElement toJsonTree(){        return EasyUITreeGsonBuilder.INSTANCE.create().toJsonTree(this);    }}

2.GosonBuilder

public class EasyUITreeGsonBuilder {    public static final GsonBuilder INSTANCE = new GsonBuilder();    static {        INSTANCE.disableHtmlEscaping();         INSTANCE.registerTypeAdapter(EasyUITree.class,new EasyUITreeGsonAdapter());    }    public static Gson create() {        return INSTANCE.create();    }}
public class EasyUITreeGsonAdapter implements JsonSerializer<EasyUITree>{    @Override    public JsonElement serialize(EasyUITree tree, Type typeOfSrc,JsonSerializationContext context) {        JsonObject treejson = new JsonObject();        if(tree.getId() !=null){            treejson.addProperty("id", tree.getId());        }        if(tree.getText() !=null){            treejson.addProperty("text", tree.getText());        }        if(tree.isChecked()){            treejson.addProperty("checked", true);        }        if(tree.getState()!=null){            if(tree.getState()=="closed"){                treejson.addProperty("state", "closed");            }else{}        }        if(tree.getAttributes() !=null){            treejson.add("attributes", tree.getAttributes());        }        //chirldren         if(tree.getChildren().size()!=0){            JsonArray treesJsonArray = new JsonArray();            for(EasyUITree node :tree.getChildren()){                //使用递归构建子节点                JsonElement serialize = serialize(node,typeOfSrc,context);                treesJsonArray.add(serialize);                treejson.add("children", treesJsonArray);            }           }        return treejson;    }}

3.测试
我这边是企业号微信的通讯录树

/**     *      * 获取部门的用户树     * @return     * @throws WxErrorException     */    public static List<EasyUITree> getTrees() throws WxErrorException{        WxCpService wxCpService = WxCpMsgService.getInstance();        //部门list集合        List<WxCpDepart> departList = wxCpService.departGet();        List<EasyUITree> trees = new ArrayList<EasyUITree>();        for(WxCpDepart dept : departList){            EasyUITree tree = new EasyUITree();            tree.setId(dept.getId().toString());            tree.setText(dept.getName());            tree.setAttributes(new WxCpGsonBuilder().create().toJsonTree(dept));            trees.add(tree);                List<EasyUITree> children = tree.getChildren();            //通过部门得到的用户list集合            List<WxCpUser> userList = wxCpService.userList(dept.getId(),true,0);            for(WxCpUser user: userList){                EasyUITree tree1 = new EasyUITree();                tree1.setId(user.getUserId());                tree1.setText(user.getName());                tree1.setAttributes(new WxCpGsonBuilder().create().toJsonTree(user));                children.add(tree1);            }        }        return trees;    }
    public static void main(String[] args) throws WxErrorException {        WxCpService wxCpService = WxCpMsgService.getInstance();        List<EasyUITree> slist = getTrees();        List<EasyUITree> jlist = new ArrayList<EasyUITree>();        for(EasyUITree t1 :slist){            boolean mark = false;            for(EasyUITree t2 : slist){                //获取部门对象                WxCpDepart d1 = WxCpDepart.fromJson(t1.getAttributes().toString());                WxCpDepart d2 = WxCpDepart.fromJson(t2.getAttributes().toString());                if(d1.getParentId()==d2.getId()){                      mark = true ;                    if(t2.getChildren().size()==0){                        t2.setChildren(new ArrayList<EasyUITree>());                    }                    t2.getChildren().add(t1);                    break;                }            }            if(!mark){                jlist.add(t1);            }        }         StringBuilder jsonStr = new StringBuilder();         jsonStr.append("[");         for(EasyUITree shu : jlist){             jsonStr.append(shu.toJson()+",");         }         String jstr = jsonStr.substring(0, (jsonStr.lastIndexOf(",")));         jstr = jstr + "]";         System.out.println(jstr);    }

最后打印出来的json
这里写图片描述
easyui页面展示效果
这里写图片描述

0 0
原创粉丝点击