递归反射构建EasyUI-Tree格式数据

前台需要获取easyui tree格式的数据时,就需要将查询出的实体构成所需要的格式,一个项目可能有n多树,直接写个方法方便转换,顺便给自己备忘
首先tree的枚举

public enum TreeNodeType {
      ID,
      TEXT,
      STATE,
      ICON,
      CHECKED,
      ATTRIBUTES,
      ORDER,
      EXTVALUE,
      CHILDREN,
      PARENTID
}

注解

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)  
public @interface TreeType {
    public TreeNodeType type();
}
//tree格式实体类
import java.io.Serializable;
import java.util.List;

public class TreeNode implements Serializable{

    private static final long serialVersionUID = 2995243732685598224L;

    private String id;
    private String text;
    private String state;
    private String iconCls;
    private boolean checked;
    private Object attributes;
    private int order;
    private String extValue;
    private List<TreeNode> children;
    private String parentId;
    public String getId() {
        return id;
    }
    .....
    .....
        /**
     * 转换单个实体为TreeNode格式
     * @param bean
     * @param nodeArgs 如果不为空 设置tree的打开state,以及显示的icon样式
     * @return
     */
    public static TreeNode TransClsToTreeNode(Object bean,TreeNode nodeArgs){
        TreeNode node = new TreeNode();
        Class<?> beanClass = (Class<?>)bean.getClass();
        Field[] fs = beanClass .getDeclaredFields();  
        for (Field f : fs) {
            f.setAccessible(true); //设置些属性是可以访问的  
            TreeType treeType = f.getAnnotation(TreeType.class);
            if(treeType!=null){
                try {
                    Object val = f.get(bean);//得到此属性的值    
                    TreeNodeType eType = treeType.type();
                    if(val!=null&&eType.name().equals(TreeNodeType.ID.name())){
                        node.setId(val.toString());
                    }else if(val!=null&&eType.name().equals(TreeNodeType.TEXT.name())){
                        node.setText(val.toString());
                    }else if(val!=null&&eType.name().equals(TreeNodeType.ICON.name())){
                        node.setIconCls(val.toString());
                    }else if(val!=null&&eType.name().equals(TreeNodeType.ATTRIBUTES.name())){
                        node.setAttributes(val);
                    }else if(val!=null&&eType.name().equals(TreeNodeType.ORDER.name())){
                        node.setOrder(Integer.parseInt(val.toString()));
                    }else if(val!=null&&eType.name().equals(TreeNodeType.EXTVALUE.name())){
                        node.setExtValue(val.toString());
                    }else if(val!=null&&eType.name().equals(TreeNodeType.PARENTID.name())){
                        node.setParentId(val.toString());
                    }
                    if(nodeArgs!=null){
                        if(nodeArgs.getState()!=null&&!nodeArgs.getState().equals("")){
                            node.setState(nodeArgs.getState());
                        }
                        if(nodeArgs.getIconCls()!=null&&node.getIconCls().equals("")){
                            node.setState(nodeArgs.getIconCls());
                        }if(nodeArgs.getExtValue()!=null&&!nodeArgs.getExtValue().equals("")){
                            node.setExtValue(nodeArgs.getExtValue());
                        }
                    }
                    List<TreeNode>children = new ArrayList<TreeNode>();
                    node.setChildren(children);
                    node.setChecked(false);
                    node.setState("open");
                } catch (Exception e) {
                    return null;                
                }
            }
        }
        return node;
    }
    /**
     * 递归构造TreeNode集合
     * @param beans //实体集合
     * @param nodes //new 一个即可
     * @param pid //首次父id
     * @return
     */
    public static <T> List<TreeNode> bulidTreeNode(List<T>beans,List<TreeNode>nodes,String pid,TreeNode nodeArgs){
        String parentId="";
        String clsId="";
        for (Object bean : beans) {
            Class<?> beanClass = (Class<?>)bean.getClass();
            Field[] fs = beanClass .getDeclaredFields();  
            for (Field f : fs) {
                f.setAccessible(true); //设置些属性是可以访问的  
                TreeType treeType = f.getAnnotation(TreeType.class);
                if(treeType!=null){
                    try {
                        Object val = f.get(bean);//得到此属性的值    
                        TreeNodeType eType = treeType.type();
                        if(eType.name().equals(TreeNodeType.ID.name())){
                            clsId= val.toString();
                        }
                        if(eType.name().equals(TreeNodeType.PARENTID.name())){
                            parentId = val.toString();
                            break;
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
            if(parentId!=""&&parentId.equals(pid)){
                TreeNode node = TransClsToTreeNode(bean,nodeArgs);
                nodes.add(node);
                bulidTreeNode(beans, node.getChildren(), clsId,nodeArgs);
            }

        }
        return nodes;
    }

使用:
需要转换的根据相应情况填写注解

public class testTree implements Serializable{
    private static final long serialVersionUID = -667055066413799654L;
    @TreeType(type=TreeNodeType.ID)
    private int dicId; //id
    @TreeType(type=TreeNodeType.TEXT)
    private String dicName; //字典名称
    private String dicValue; //字典值
    @TreeType(type=TreeNodeType.EXTVALUE)
    private String dicType; //字典类型
    private String dicRemark; //备注
    @TreeType(type=TreeNodeType.ORDER)
    private int dicOrder; //排序
    @TreeType(type=TreeNodeType.PARENTID)
    private int dicParent; //父节点
    private String dicExtValue; //扩展值
    private boolean dicIsDel;//是否禁用
    private String dicIcon;//图表
    private boolean dicIsParent;//是否是父节点

    public get... set.....

掉用

public List<TreeNode> buildTreeNode() {
        List<TreeNode>nodes = new ArrayList<>();
        List<SysDictionary> dics = sysDictionaryDAO.getDicByCondition(dic);
        List<TreeNode>bulidNode = TranslateUtil.bulidTreeNode(dics, nodes, "父id"," 改变图标及是否打开");
        //loadTreeNode(dics, nodes, -1);
        return bulidNode;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值