easyui tree 递归查询树 oracle为例

本文介绍如何使用EasyUI的Tree组件在jsp中加载数据,并通过Java实现Oracle数据库的递归查询,构造树形结构。示例代码包括js的tree配置,Java的递归方法以及TreeNode实体类定义。同时,提供了SQL语句,说明了在Oracle中如何构造父子结构的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jsp:

<ul id='dptDataTree' class="easyui-tree"></ul>


js:

    $.post('xxxxx.action', function(data) {
        $('#dptDataTree').tree({
            data: data,
            lines:true,//有没有线
            dnd:false,//是否允许拖动
            animate: true,
            onSelect: function(node){
                  findById(node.id);
            }
        });
    }, 'json');

easyui中加载数据源的方法如下:

  1. $('#tt').tree({
  2. url: ...,
  3. loadFilter: function(data){
  4. if (data.d){
  5. return data.d;
  6. } else {
  7. return data;
  8. }
  9. }
  10. });
此种方法有一种弊端,则是如果你的叶子节点state为closed的时候,点击叶子节点,则会再次请求action,无穷尽的load数据,而采用先post请求数据,再用静态源的方式则很好的解决此问题。

java:

递归方法:

public static TreeNode constructTree(TreeNode rootNode, Object[][] res, int rootLevel){
        List<TreeNode> childNodeList = new ArrayList<TreeNode>();
        //构造根节点
        for(int i=0; i<res.length; i++){
            String pid = StringHelper.obj2str(res[i][1], "");
            if(pid.equals(rootNode.getId()) && !pid.equals(StringHelper.obj2str(res[i][0], ""))){
                TreeNode childNode = new TreeNode();
                childNode.setId(StringHelper.obj2str(res[i][0], ""));
                childNode.setpId(pid);
                childNode.setText(StringHelper.obj2str(res[i][2], ""));
                if(res[i].length == 4){
                    childNode.setNumId(StringHelper.obj2str(res[i][3], ""));
                }
                childNode.setState("closed");
                //设置深度
                childNode.setLevel(rootLevel+1);
                childNodeList.add(childNode);
            }
        }
        //设置子节点
        rootNode.setChildren(childNodeList);
        //设置是否叶子节点
        if(childNodeList.size()==0){
            rootNode.setLeaf(true);
        } else {
            rootNode.setLeaf(false);
        }
        //递归构造子节点
        for(int j=0; j<childNodeList.size();j++){
            //进入子节点构造时深度+1
            constructTree(childNodeList.get(j), res, ++rootLevel);
            //递归调用返回时,构造子节点的兄弟节点,深度要和该子节点深度一样,因为之前加1,所以要减1
            --rootLevel;
        }
        return rootNode;
    }


TreeNode实体类

    private String id;//节点编号  
    private String text;//节点文本  
    private String state="closed";//节点状态  
    private String pId;//父id
    private List<TreeNode> children=new ArrayList<TreeNode>();//子节点集合  
    private int level;//深度
    private boolean leaf;//是否叶子节点

省略set get方法


sql语句:

以oracle为例,需要使用start with .. connect by将数据展示为父子结构的。


代码可以直接黏贴使用,如有问题可以交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值