JBOSS 点滴

丰丰的博客

springboot中树形结构的开发

POM中引入
        <!--JSON树形结构 转换-->
        
<dependency>
            
<groupId>net.sf.json-lib</groupId>
            
<artifactId>json-lib</artifactId>
            
<version>2.4</version>
            
<classifier>jdk15</classifier>
        
</dependency>
实体类创建
import net.sf.json.JSONArray;

import java.util.ArrayList;
import java.util.List;

/**
 * 构造目录JSON树
 * Created by   network on 2019/5/22
 
*/
public class TreeBuilder {

    List
<Node> nodes = new ArrayList<>();

    
public String buildTree(List<Node> nodes) {

        TreeBuilder treeBuilder 
= new TreeBuilder(nodes);

        
return treeBuilder.buildJSONTree();
    }

    
public TreeBuilder() {
    }

    
public TreeBuilder(List<Node> nodes) {
        
super();
        
this.nodes = nodes;
    }

    
// 构建JSON树形结构
    public String buildJSONTree() {
        List
<Node> nodeTree = buildTree();
        JSONArray jsonArray 
= JSONArray.fromObject(nodeTree);
        
return jsonArray.toString();
    }

    
// 构建树形结构
    public List<Node> buildTree() {
        List
<Node> treeNodes = new ArrayList<>();
        List
<Node> rootNodes = getRootNodes();
        
for (Node rootNode : rootNodes) {
            buildChildNodes(rootNode);
            treeNodes.add(rootNode);
        }
        
return treeNodes;
    }

    
// 递归子节点
    public void buildChildNodes(Node node) {
        List
<Node> children = getChildNodes(node);
        
if (!children.isEmpty()) {
            
for (Node child : children) {
                buildChildNodes(child);
            }
            node.setChildren(children);
        }
    }

    
// 获取父节点下所有的子节点
    public List<Node> getChildNodes(Node pnode) {
        List
<Node> childNodes = new ArrayList<>();
        
for (Node n : nodes) {
            
if (pnode.getId().equals(n.getPid())) {
                childNodes.add(n);
            }
        }
        
return childNodes;
    }

    
// 判断是否为根节点
    public boolean rootNode(Node node) {
        
boolean isRootNode = true;
        
for (Node n : nodes) {
            
if (node.getPid().equals(n.getId())) {
                isRootNode 
= false;
                
break;
            }
        }
        
return isRootNode;
    }

    
// 获取集合中所有的根节点
    public List<Node> getRootNodes() {
        List
<Node> rootNodes = new ArrayList<>();
        
for (Node n : nodes) {
            
if (rootNode(n)) {
                rootNodes.add(n);
            }
        }
        
return rootNodes;
    }

    
public static class Node {

        
private String id;
        
private String pid;
        
private String name;
        
private List<Node> children;

        
public Node() {
        }

        
public Node(String id, String pid, String name) {
            
super();
            
this.id = id;
            
this.pid = pid;
            
this.name = name;
        }

        
public String getId() {
            
return id;
        }

        
public void setId(String id) {
            
this.id = id;
        }

        
public String getPid() {
            
return pid;
        }

        
public void setPid(String pid) {
            
this.pid = pid;
        }

        
public String getName() {
            
return name;
        }

        
public void setName(String name) {
            
this.name = name;
        }


        
public List<Node> getChildren() {
            
return children;
        }

        
public void setChildren(List<Node> children) {
            
this.children = children;
        }
    }
}
mapper.xml
    <!--根据条件查询返回Node-->
    
<select id="findByItemtypeTree" parameterType="BsItemtype" resultType="Node">
        SELECT upcode as pid,itemname as name,itemtypecode as id FROM 表名 WHERE 1=1
        
<if test="upcode != null  and upcode != '' ">
            and upcode = #{值}
        
</if>
    
</select>
controller:返回结果
    //树形结构
    @RequestMapping("left")
    ModelAndView left() 
throws JSONException {
        String mavStr 
= "";
        BsItemtype queryItemtype 
= new BsItemtype();
        
//查询根目录树
      
//  queryItemtype.setUpcode("00");
        
// 获取全部目录节点
        List<TreeBuilder.Node> itemtypeTree = itemtypeService.findByItemtypeTree();

        
// 拼装树形json字符串
         mavStr = new TreeBuilder().buildTree(itemtypeTree);
        mavStr 
= mavStr.replaceAll("\"children\"","\"nodes\"");
        mavStr
= mavStr.replaceAll("\"id\"","\"value\"");
        mavStr 
= mavStr.replaceAll("\"name\"","\"text\"");
        ModelAndView mav 
= new ModelAndView("/bs/itemtype/itemtypeLeft.html");//配置返回路径
        System.out.println(mavStr);
        mav.addObject(
"mavStr", mavStr.toString());
        
return mav;
    }
DAO层:
List<TreeBuilder.Node> findByItemtypeTree();

html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
    
<meta charset="UTF-8">
    
<title></title>

    
<!-- Required Stylesheets -->
    
<link href="/oastyle/css/bootstrap.css" rel="stylesheet">
    
<!-- Required Javascript -->
    
<script src="/js/jquery.js"></script>
    
<script src="/js//bootstrap-treeview.js"></script>
</head>
<body>
<div id="tree"></div>
<script th:inline="javascript">
var tree = eval([[${mavStr}]]);
         
function getTree() {
        
// Some logic to retrieve, or generate tree structure
        return tree;
    }

    $('#tree').treeview({
        data: getTree(),
        enableLinks: 
true});

    $('#tree').on('nodeSelected',
function(event, data) {
          window.parent.itemtypeRight.location.href
="/itemtype/list?upcode="+data.value;
    });

</script>

</body>
</html>

posted on 2019-05-21 19:08 半导体 阅读(2062) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: