树形数据后台组建
/** * 重新组建menu导航 * @param menuList * @param menus * @param pid * @author hous */ public List<MenuCustom> getMenuTreeLists(List<MenuCustom> menus, Integer pid) throws CustomException{ List<MenuCustom> children = null; List<MenuCustom> menuList = new ArrayList<MenuCustom>(); for (MenuCustom menu : menus) { if(menu.getPid() == pid){ children = new ArrayList<MenuCustom>(); children = getMenuTreeLists(menus, menu.getId()); menu.setChildren(children); menuList.add(menu); } } return menuList; }
前台页面显示
<!-- Sidebar Menu Items - These collapse to the responsive navigation menu on small screens --> <div class="collapse navbar-collapse navbar-ex1-collapse"> <ul class="nav navbar-nav side-nav"> <li> <a href="${pageContext.request.contextPath}/index"><i class="fa fa-fw fa-dashboard"></i> Dashboard</a> </li> <c:forEach items="${userInfo.menuList}" var="menu" varStatus="s"> <c:if test="${!(menu.children eq null)}"> <li> <a href="javascript:;" data-toggle="collapse" data-target="#menu${s.index}"><i class="fa fa-fw fa-arrows-v"></i> ${menu.name} <i class="fa fa-fw fa-caret-down"></i></a> <ul id="menu${s.index}" class="collapse"> <c:forEach items="${menu.children}" var="v"> <li> <a href="${pageContext.request.contextPath}/${v.url}">${v.name}</a> </li> </c:forEach> </ul> </li> </c:if> <c:if test="${menu.children eq null}"> <li> <a href="${pageContext.request.contextPath}/${menu.url}"><i class="fa fa-fw fa-dashboard"></i> ${menu.name}</a> </li> </c:if> </c:forEach> </ul> </div> <!-- /.navbar-collapse -->
另一种方式树形数据展示
package com.hous; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import com.alibaba.fastjson.JSON; public class TreeUtils { public static void main(String[] args) { List<Node> list = new ArrayList<Node>(); Node n0 = new Node("430000", "430000", "430000", "江苏省", 1); Node n1 = new Node("430000", "430500", "430500", "南京市", 5); Node n2 = new Node("430500", "430521", "430521", "江宁区", 28); Node n3 = new Node("430500", "430527", "430527", "玄武区", 27); Node n4 = new Node("430000", "430100", "430100", "无锡市", 1); Node n5 = new Node("430100", "430102", "430102", "江南区", 10); list.add(n0); list.add(n1); list.add(n2); list.add(n3); list.add(n4); list.add(n5); Node root = null; Map<String, Node> nodeMap = new HashMap<String, Node>(); for (Node node : list) { nodeMap.put(node.getRegId(), node); } for (Entry<String, Node> entry : nodeMap.entrySet()) { Node temp = entry.getValue(); if (temp.getRegId() == "430000") { root = temp; } else { nodeMap.get(temp.getpRegId()).getChild().add(temp); } } // root.sortChildren(); System.out.println(JSON.toJSONString(root.getChild())); } } class Node { private List<Node> child = new ArrayList<Node>(); private String pRegId; private String regCode; private String regId; private String regName; private int regOrder; public Node(String pRegId, String regCode, String regId, String regName, int regOrder) { super(); this.pRegId = pRegId; this.regCode = regCode; this.regId = regId; this.regName = regName; this.regOrder = regOrder; } public List<Node> getChild() { return child; } public void setChild(List<Node> child) { this.child = child; } public String getpRegId() { return pRegId; } public void setpRegId(String pRegId) { this.pRegId = pRegId; } public String getRegCode() { return regCode; } public void setRegCode(String regCode) { this.regCode = regCode; } public String getRegId() { return regId; } public void setRegId(String regId) { this.regId = regId; } public String getRegName() { return regName; } public void setRegName(String regName) { this.regName = regName; } public int getRegOrder() { return regOrder; } public void setRegOrder(int regOrder) { this.regOrder = regOrder; } // 孩子节点排序 @SuppressWarnings("unchecked") public void sortChildren() { // 对本层节点进行排序 // 可根据不同的排序属性,传入不同的比较器,这里传入ID比较器 Collections.sort(child, new NodeIDComparator()); // 对每个节点的下一层节点进行排序 for (Iterator<Node> it = child.iterator(); it.hasNext();) { ((Node) it.next()).sortChildren(); } } } class NodeIDComparator implements Comparator { // 按照节点编号比较 public int compare(Object o1, Object o2) { int j1 = ((Node) o1).getRegOrder(); int j2 = ((Node) o2).getRegOrder(); return (j1 < j2 ? -1 : (j1 == j2 ? 0 : 1)); } }
相关推荐
js 树形结构数据遍历条件判断删除对应数据
数据结构为数组中包含对象–树形结构,用Vue组件的写法实现以下的效果: 树形列表,缩进显示层级,第5级数据加底色,数据样式显色,点击展开折叠数据。本文为用Vue实现方式,另有一篇为用knockout.js的实现方法。 ...
数据结构课程设计 数据结构课程设计-树形目录结构 20 1 数据结构课程设计-树形目录结构全文共21页,当前为第1页。数据结构课程设计-树形目录结构全文共21页,当前为第1页。 数据结构课程设计-树形目录结构全文共21页...
react-antd table树形数据默认展开行实现jsx文件
php树形目录php树形目录php树形目录php树形目录php树形目录php树形目录php树形目录php树形目录php树形目录php树形目录php树形目录php树形目录php树形目录php树形目录php树形目录php树形目录
典型的sql数据库树形关系,可以根据父找所有的子,也可以指定子找所有的父
开发项目的时候遇到需要在表单中选择参会人员,根据不同部门下选择不同的人,在element-ui中有树形控件能满足这种情况,后台封装数据记录一下。 封装格式: 返回数据格式: 接收数据的pojo类: 2018年4月12...
SSH+Easyui之TreeGrid树形展现数据源码
treeMap实现分组数据树形结构,在通过Redis和MySQL数据库ID生成序列ID
把扁平化的数据转换成树形结构的JSON
由于layui树形组件格式的特殊性,可能从mysql查出数据组装成layui属性组件所需的数据格式这一点会让你头痛; 在该文件中完整的展示了如何利用tp的模型从mysql取得数据,并进行无限分类,最终转换成layui树形组件所...
当 row 中包含 children 字段时,被视为树形数据。渲染树形数据时,必须要指定 row-key。支持子节点数据异步加载。 通过指定 row 中的 hasChildren 字段来指定哪些行是包含子节点。children 与 hasChildren...
利用element树形控件菜单栏被触发时加载事件进行Element树形结构懒加载的动态加载。
sql树形数据处理示例(Jet wang 最新整理).
mysql 树形结构查询,使用存储过程,实现mysql的树形结构查询
用递归实现C#树形结构 ,用递归实现C#树形结构 ,
数据结构的树形查找实验,下载即可使用,无需修改。
js数组转为树形结构 树形结构数据扁平化
java实现的jsp动态树形菜单功能 简单的一个例子 代码全面 功能完善
NULL 博文链接:https://hahawowo.iteye.com/blog/783874