jquery ztree实现下拉树形框使用到了json数据

  公司最近的项目需要用到树形下拉框,在网上找了挺多源码,最后还是采用了zTree来实现,因为代码的移植性比较高,而且数据的获取比较容易。废话不多说,直接上代码。

  index.jsp

  

复制代码 代码如下:

  <%@ page language="java" pageEncoding="UTF-8"%>

  <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

  <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

  <html>

  <head>

  <link rel="stylesheet" href="<c:url value='/js/ztree/css/demo.css'/>" type="text/css"></link>

  <link rel="stylesheet" href="<c:url value='/js/ztree/css/zTreeStyle/zTreeStyle.css'/>" type="text/css"></link>

  <script type="text/javascript" src="<c:url value='/js/ztree/js/jquery-1.4.4.min.js'/>"></script>

  <script type="text/javascript" src="<c:url value='/js/ztree/js/jquery.ztree.core-3.5.js'/>"></script>

  <SCRIPT type="text/javascript">

  <!--

  var setting = {

  view: {

  dblClickExpand: false

  },

  data: {

  simpleData: {

  enable: true

  }

  },

  callback: {

  beforeClick: beforeClick,

  onClick: onClick

  }

  };

  //json数据源,也可以从后台读取json字符串,并转换成json对象,如下所示

  //var strNodes = '${jsonList}';

  //var zNodes = eval("("+strNodes+")"); //将json字符串转换成json对象数组,strNode一定要加"()",不然转不成功

  var zNodes =[

  {id:1, pId:0, name:"北京"},

  {id:2, pId:0, name:"天津"},

  {id:3, pId:0, name:"上海"},

  {id:6, pId:0, name:"重庆"},

  {id:4, pId:0, name:"河北省", open:true},

  {id:41, pId:4, name:"石家庄"},

  {id:42, pId:4, name:"保定"},

  {id:43, pId:4, name:"邯郸"},

  {id:44, pId:4, name:"承德"},

  {id:5, pId:0, name:"广东省", open:true},

  {id:51, pId:5, name:"广州"},

  {id:52, pId:5, name:"深圳"},

  {id:53, pId:5, name:"东莞"},

  {id:54, pId:5, name:"佛山"},

  {id:6, pId:0, name:"福建省", open:true},

  {id:61, pId:6, name:"福州"},

  {id:62, pId:6, name:"厦门"},

  {id:63, pId:6, name:"泉州"},

  {id:64, pId:6, name:"三明"}

  ];

  function beforeClick(treeId, treeNode) {

  var check = (treeNode && !treeNode.isParent);

  if (!check) alert("只能选择城市...");

  return check;

  }

  function onClick(e, treeId, treeNode) {

  var zTree = $.fn.zTree.getZTreeObj("treeDemo"),

  nodes = zTree.getSelectedNodes(),

  v = "";

  nodes.sort(function compare(a,b){return a.id-b.id;});

  for (var i=0, l=nodes.length; i<l; i++) {

  v += nodes[i].name + ",";

  }

  if (v.length > 0 ) v = v.substring(0, v.length-1);

  var cityObj = $("#citySel");

  cityObj.attr("value", v);

  }

  function showMenu() {

  var cityObj = $("#citySel");

  var cityOffset = $("#citySel").offset();

  $("#menuContent").css({left:cityOffset.left + "px", top:cityOffset.top + cityObj.outerHeight() + "px"}).slideDown("fast");

  $("body").bind("mousedown", onBodyDown);

  }

  function hideMenu() {

  $("#menuContent").fadeOut("fast");

  $("body").unbind("mousedown", onBodyDown);

  }

  function onBodyDown(event) {

  if (!(event.target.id == "menuBtn" || event.target.id == "menuContent" || $(event.target).parents("#menuContent").length>0)) {

  hideMenu();

  }

  }

  $(document).ready(function(){

  $.fn.zTree.init($("#treeDemo"), setting, zNodes);

  });

  //-->

  </SCRIPT>

  </head>

  <body>

  <div class="zTreeDemoBackground left">

  <ul class="list">

  <li class="title"> <span class="highlight_red">选择城市时,按下 Ctrl 或 Cmd 键可以进行多选</span></li>

  <li class="title"> 城市:<input id="citySel" type="text" readonly value="" style="width:120px;"/>

  <a id="menuBtn" href="#" onclick="showMenu(); return false;">选择</a></li>

  </ul>

  </div>

  <div id="menuContent" class="menuContent" style="display:none; position: absolute;">

  <ul id="treeDemo" class="ztree" style="margin-top:0; width:160px;"></ul>

  </div>

  </body>

  </html>

  spring后台

  json数据类

  

复制代码 代码如下:

  public class EquipTypeJson {

  private String id;

  private String pId;

  private String 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;

  }

  }

  controller页面

  

复制代码 代码如下:

  public ModelAndView List(HttpServletRequest request, HttpServletResponse response,Product prod) throws Exception {

  Map map=new HashMap();

  List<EquipTypeJson> list = testService.getAllEquipType();//数据库中获取源数据

  JSONArray jsonArray = JSONArray.fromObject(list); //将list数据转为json对象

  String json = jsonArray.toString(); //将json对象转为字符串

  map.put("jsonList", json);

  return new ModelAndView("equip/List").addAllObjects(map);

  }