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>