我个人后台使用List<Map<String,Object>>拼接,转换为Json数组传递到前台,代码片段如下:
List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
JSONArray jsonStr = null;
Map<String, Object> orgMap = new HashMap<String, Object>();
orgMap.put("open", true); //根节点展开
orgMap.put("id", 1);//根节点的ID
orgMap.put("pId", 0);//父id
orgMap.put("name", "Name"); //根节点的名字
resultList.add(orgMap); //列表中先添加第一级的数据
jsonStr = JSONArray.fromObject(resultList);//转换为Json数组
return jsonStr.toString();
因为前台需要的是下面的结构,所以拼接上述代码。
var zNodes =[
{id:1, pId:0, name:"[core] 基本功能 演示", open:true,},
{id:101, pId:1, name:"标准 JSON 数据"},
{id:102, pId:1, name:"简单 JSON 数据"},
{id:2, pId:0, name:"单选框功能 演示", open:false},
{id:201, pId:2, name:"Checkbox 勾选操作"},
{id:206, pId:2, name:"Checkbox演示"},
{id:3, pId:0, name:"编辑功能 演示", open:false},
{id:301, pId:3, name:"拖拽 节点 基本控制"},
{id:302, pId:3, name:"拖拽 节点 高级控制"}
];
前台直接 var zNodes = 进行接收。
<script type="text/javascript">
var setting = {
view: {
//addHoverDom: addHoverDom,//用于当鼠标移动到节点上时,显示用户自定义控件,显示隐藏状态同zTree 内部的编辑、删除按钮
//removeHoverDom: removeHoverDom,//用于当鼠标移出节点时,隐藏用户自定义控件,显示隐藏状态同 zTree 内部的编辑、删除按钮
selectedMulti: false //设置是否允许同时选中多个节点。
},
check: { //设置zTree是否可以被勾选,及勾选的参数配置
chkStyle: "checkbox",
enable: true, //设置 zTree 的节点上是否显示 checkbox / radio
chkboxType : { "Y" : "", "N" : "" }
},
data: {
simpleData: {
enable: true //确定 zTree 初始化时的节点数据、异步加载时的节点数据、或 addNodes 方法中输入的 newNodes 数据是否采用简单数据模式 (Array)
}
},
edit: { //可以编辑节点 : 增 删 改
enable: false //设置 zTree 是否处于编辑状态,
},
callback: {
onCheck: onCheckNodeSite, //回调函数,获取选节点
beforeCheck : function(treeId, treeNode) {//该函数为不选中根节点
if (treeNode.pId == null) {//判断节点点pId为null时,不被选中
alert("请选择子节点!");
return false;
}
}
}
};
var zNodes = <#ztreeList>;//接收后台传过来的json数组
$(document).ready(function(){
$.fn.zTree.init($("#treeDemo"), setting, zNodes);
});
var nodeJson = [];
var treenode;
function onCheckNodeSite(){//获取所有被选中节点的回调函数
treenode = $.fn.zTree.getZTreeObj("treeDemo");
var chkNodeArr = treenode.getCheckedNodes(true); //true获取选中节点,false未选中节点,默认为true
for (var i = 0; i < chkNodeArr.length; i++) {
var channelStr = parentPathName(chkNodeArr[i].parentTId);//获取选中节点的所有父节点名称返回的字符串
nodeJson[i] = { "id": chkNodeArr[i].id, "name": chkNodeArr[i].name};
alert(nodeJson[i]);
}
};
/* 递归查询选中节点的所有父节点 */
function parentPathName(parentTId){
var treenode = $.fn.zTree.getZTreeObj("treeDemo");
var str="";
if(parentTId!=null){
var node = treenode.getNodeByTId(parentTId);
if(node!=null && typeof(node)!='undefined'){
str=parentPathName(node.parentTId);
str+=node.name+"/";
}
return str;
}
return "";
}
//删除选中栏目,调用每个节点上的button函数removeChannel(this),给该button写入id,为chkNodeArr[i].tId,调用下面函数
button代码,写在获取所有被选中节点的回调函数的循环中
<button style="background:none;border:none;float:right;" id="'+chkNodeArr[i].tId+'" type="button" οnclick="removeChannel(this)"></button>
function removeChannel(btn){//删除选中栏目
var node = treenode.getNodeByTId(btn.id);
treenode.checkNode(node);
onCheckNodeSite();
}
/* 删除全部选中 */
function deleteAll(){
treenode.checkAllNodes(false);
}
</script>