欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

bootstrap treeview树形展示走过的坑

程序员文章站 2022-06-08 14:59:41
...

bootstrap 树形展示从开始采坑到最后成功展示

  • 开始(思路一)

  •   @RequestMapping("/Tree")
     @ResponseBody
     public void getCodeTree(HttpServletResponse response) throws IOException {
         // JsonObject jlist = new JsonObject();
         JsonArray jlist = new JsonArray();
         //pid为0的对象,第一层
         List<CodeTree> codeTreeList = codeTreeService.getCodeTreeByPid("0");
    
         JsonArray codeTreeByPid = getCodeTreeByPid(codeTreeList, jlist);
         for (int i = 0; i < codeTreeList.size(); i++) {
             JsonObject jsonObject0 = new JsonObject();
             jsonObject0.addProperty("text", codeTreeList.get(i).getMc());
             List<CodeTree> codeTree = getCodeTreeId(codeTreeList.get(i).getBm());
             //是否有第二层
             if (codeTree.size() != 0) {
                 JsonArray jsonArray1 = new JsonArray();
    
                 for (int j = 0; j < codeTree.size(); j++) {
                     JsonObject idJsonObject1 = new JsonObject();
                     idJsonObject1.addProperty("text", codeTree.get(j).getMc());
                     List<CodeTree> codeTreeList1 = getCodeTreeId(codeTree.get(j).getBm());
                     //是否有第三层
                     if (codeTreeList1.size() != 0) {
                         JsonArray jsonArray2 = new JsonArray();
                         for (int k = 0; k < codeTreeList1.size(); k++) {
                             JsonObject idJsonObject2 = new JsonObject();
                             idJsonObject2.addProperty("text", codeTreeList1.get(k).getMc());
                             List<CodeTree> codeTreeList2 = getCodeTreeId(codeTree.get(k).getBm());
                                 是否有第四层
                             if (codeTreeList2.size() != 0) {
                                 JsonArray jsonArray3 = new JsonArray();
                                 for (int q = 0; q < codeTreeList2.size(); q++) {
                                     JsonObject idJsonObject3 = new JsonObject();
                                     idJsonObject3.addProperty("text", codeTreeList2.get(q).getMc());
                                     List<CodeTree> codeTreeList3 = getCodeTreeId(codeTree.get(q).getBm());
                                     //是否有第五层
                                     if (codeTreeList3.size() != 0) {
                                         JsonArray jsonArray4 = new JsonArray();
                                         for (int r  = 0; r < codeTreeList3.size(); r++) {
                                             JsonObject idJsonObject4 = new JsonObject();
                                             idJsonObject4.addProperty("text", codeTreeList3.get(r).getMc());
                                             List<CodeTree> codeTreeList4 = getCodeTreeId(codeTree.get(r).getBm());
                                             //是否有第六层
                                             if (codeTreeList4.size() != 0) {
                                                 JsonArray jsonArray5 = new JsonArray();
                                                 for (int t  = 0; t < codeTreeList4.size(); t++) {
                                                     JsonObject idJsonObject5 = new JsonObject();
                                                     idJsonObject5.addProperty("text", codeTreeList4.get(t).getMc());
                                                   //  List<CodeTree> codeTreeList5 = getCodeTreeId(codeTree.get(t).getBm());
                                                     //是否有第六层
                                                     jsonArray5.add(idJsonObject5);
                                                 }
                                                 idJsonObject3.add("nodes", jsonArray5);
                                             }
    
                                             jsonArray4.add(idJsonObject4);
                                         }
                                         idJsonObject3.add("nodes", jsonArray4);
                                     }
                                     jsonArray3.add(idJsonObject3);
                                 }
                                 idJsonObject2.add("nodes", jsonArray3);
                             }
                            jsonArray2.add(idJsonObject2);
    
                         }
                             idJsonObject1.add("nodes", jsonArray2);
    
                         }
                         jsonArray1.add(idJsonObject1);
                     }
                     jsonObject0.add("nodes", jsonArray1);
                 }
                 jlist.add(jsonObject0);
    
             }
         response.setContentType("text/html;charset=UTF-8");
         response.getWriter().write(codeTreeList.toString());
         }
    

    总结:这种方法造成tomcat运行不起来

  • 改过之后(思路二)

  •   @RequestMapping("/Tree")
     @ResponseBody
     public void getCodeTree(HttpServletResponse response) throws IOException {
         // JsonObject jlist = new JsonObject();
         JsonArray jlist = new JsonArray();
         //pid为0的对象,第一层
         List<CodeTree> codeTreeList = codeTreeService.getCodeTreeByPid("0");
         response.setContentType("text/html;charset=UTF-8");
         response.getWriter().write(codeTreeList.toString());
         }
    
     //递归实现
     public JsonArray getCodeTreeByPid(List<CodeTree> codeTreeList,JsonArray jlist){
         for (int i  = 0; i < codeTreeList.size(); i++) {
             JsonObject jsonObject = new JsonObject();
             jsonObject.addProperty("text", codeTreeList.get(i).getMc());
             List<CodeTree> codeTree =codeTreeService.getCodeTreeByPid(codeTreeList.get(i).getBm());
             if (codeTree.size() != 0) {
                 JsonArray jsonArray = new JsonArray();
                 JsonArray codeTreeByPid = getCodeTreeByPid(codeTree, jsonArray);
                 jsonObject.add("nodes", codeTreeByPid);
             }
             jlist.add(jsonObject);
    
         }
         return jlist;
     }
    
    

·

  • 总结:树形结构的数据全部拼接加载时间过长
  • 最终的成功版本(思路三)
  • jsp页面
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <link href="${pageContext.request.contextPath}/css/bootstrap.min.css" rel="stylesheet" type="text/css">
  <link href="${pageContext.request.contextPath}/css/bootstrap-treeview.css" rel="stylesheet">
  <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.1.1.min.js"></script>
  <script type="text/javascript" src="${pageContext.request.contextPath}/js/layer/layer.js"></script>
  <script type="text/javascript" src="${pageContext.request.contextPath}/js/utils.js"></script>
  *<script src="${pageContext.request.contextPath}/js/bootstrap-treeview.js"></script>*
</head>
<body>
<div id="tree" style="width:500px;display: none;">

  <div class="tip">树形结构</div>
  <div class="modal-header-user ">
      <button type="button" class="close">
          ×
      </button>
  </div>
</div>

</body>
<script type="text/javascript">
  $(function () {
          $.ajax({
              type: "get",
              url: "../CodeTree/Tree.do",
              data: {bm: "0"},
              success: function (data) {
                  var tree = new Array();
                  $.each(data, function (index, item) {
                      tree[index] = {text: item.name, comId: parseInt(item.id)};
                  })
                  $('#tree').treeview({
                      data: tree, //节点数据
                      emptyIcon: "glyphicon glyphicon-plus"//设置图标样式
                  })
                  $('#tree').on('nodeSelected', function (event, data) {

                      //var index = $("li.node-selected").index() + 1;
                      //  $('#tree').treeview('getChecked',nodeId);
                      var index = $('#tree').treeview('getSelected');
                      getChildCom(data.comId, data.nodeId);
                  })
              }
          });
      }
  )


  //获取子公司信息
  function getChildCom(cmpId, indexVal) {
      if (typeof ($('#tree').treeview('getSelected')[0].nodes) != "undefined") {
         //这里判断当前节点下是否有值了,有就不再添加数据return防止重复添加
         //$('#tree').treeview('getSelected')取得当前选中的数据
          if ($('#tree').treeview('getSelected')[0].nodes.length > 0) {
              return;
          }
      }
      var data = {bm: cmpId}
      $.ajax({
          type: "get",
          url: "../CodeTree/Tree.do",
          dataType: "json",
          data: data,
          success: function (data) {
              $.each(data, function (index, item) {
                  var addNodes = new Array();
                  addNodes[0] = indexVal;
                  addNodes[1] = {node: {text: item.name, comId: item.id, selectable: true}};
                  $("#tree").treeview("addNode", addNodes);
                  $('#tree').treeview('expandAll', {levels: 10, silent: true});
              });
          }
      });
  }
</script>
</html>
  • sql:
    javaselect PID,BM,ZZSSL,SPBMJC,MC from bwjf_spbm where BM in( select BM from bwjf_spbm where PID =#{bm} ) order by BM
  • 总结一定要以引bootstrap的js (代码当中有)
    经历了九九八十难,真心不容易