ztree多树实现异步交互

ztree多树实现异步交互



zTree相对讲有非常好的API文档,扩展性强,使用起来比较方便。本文章主要填补下网络上zTree例子太少的空白。

实现方式:struts2 java类编写。比较灵活,可以根据我的方法实现servletRequestAware,然后在request.setAttribute()将值传入页面,也可以set ,get,传入对象为自己拼写的类似json,其实是字符串数组形式的变量。根据我的写法,传到页面后用一个标签<input type="hidden" value=${所传字符串数组} id="sNodes">
,在js中取到这个值$("#sNodes").val();当然再将这个字窜数组转化为json格式就可以了eval('('+刚才的取值+')');

为了让ztreejs读懂我们值

节点id,父节点id,显示内容name.然后根据这些字段会自动展现为树:

在setting变量中初始化就可以了:

Js代码 复制代码 收藏代码
  1. setting1 = { 
  2.    isSimpleData : true
  3.    treeNodeKey : "id"
  4.    treeNodeParentKey : "pId"
  5.    checkable : true
  6.       checkStyle : "radio"
  7.       checkRadioType : "all"
  8.    callback: { 
  9.     change: zTreeOnChange 
  10.    } 
  11.   }; 

缺点:没有实现异步加载,一次读入所有节点,对于大数据量,页面加载可能有点慢 。节点数控制在1000以内。
下面是代码

1,jsp内容

Html代码 复制代码 收藏代码
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
  2. <%@ page language="java" import="java.util.*" contentType="text/html;charSet=UTF-8" pageEncoding="utf-8"%>  
  3. <%@ taglib prefix="s" uri="/struts-tags"%>  
  4. <%String path=request.getContextPath(); %>  
  5. <%  List yhdNodes=(List<String>)request.getAttribute("yhdNodes");  
  6. List  oppoNodes=(List<String>)request.getAttribute("oppoNodes");  
  7. %>  
  8. <HTML>  
  9. <HEAD>  
  10.   <TITLE> ZTREE DEMO </TITLE>  
  11.   <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
  12.   <link rel="stylesheet" href="<%=path%>/js/ztree/zTreeStyle/zTreeStyle.css" type="text/css">  
  13.   <script type="text/javascript" src="<%=path%>/js/ztree/jquery.ztree-2.6.min.js"></script>  
  14.   <script type="text/javascript" src="<%=path%>/js/local/match/viewCategoryMappingInfoDetail.js"></script>  
  15. </HEAD>  
  16.  
  17. <BODY>  
  18. <center class="headTitle">目录映射</center>  
  19. <TABLE border=0 width="100%" class="tb1" align="center">  
  20. <tr align="center">  
  21. <td align=right valign=top width="45%">  
  22. <input id="yhdNodes" type="hidden" value="<%=yhdNodes %>">  
  23. <input id="path" type="hidden" value="<%=path%>">  
  24. <div style="height:45px;background-color:blue;width:222px;text-align:center"><h1>一号店目录</h1></div>  
  25. <div class="zTreeCategoryBackground">  
  26. <ul id="yhdTree" class="tree"></ul>  
  27. </div>  
  28. </td>  
  29. <td width="10%"><input type="button" value="保存目录关系" onclick="saveMatchedRelations();"></td>  
  30. <td align=left valign=top width="45%">  
  31. <input id="oppoNodes" type="hidden" value="<%=oppoNodes %>">  
  32. <input id="oppoSiteId" type="hidden" value="<s:property value='matchDto.siteId'/>">  
  33. <div style="height:45px;background-color:blue;width:222px;text-align:center"><h1><s:property value="matchDto.siteId"/>目录</h1></div>  
  34. <div class="zTreeCategoryBackground">  
  35. <ul id="oppoTree" class="tree"></ul>  
  36. </div>  
  37. </tr>  
  38. </TABLE>  
  39. </BODY>  
  40. </HTML>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<%@ page language="java" import="java.util.*" contentType="text/html;charSet=UTF-8" pageEncoding="utf-8"%> 
<%@ taglib prefix="s" uri="/struts-tags"%> 
<%String path=request.getContextPath(); %> 
<%  List yhdNodes=(List<String>)request.getAttribute("yhdNodes"); 
List  oppoNodes=(List<String>)request.getAttribute("oppoNodes"); 
%> 
<HTML> 
<HEAD> 
  <TITLE> ZTREE DEMO </TITLE> 
  <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
  <link rel="stylesheet" href="<%=path%>/js/ztree/zTreeStyle/zTreeStyle.css" type="text/css"> 
  <script type="text/javascript" src="<%=path%>/js/ztree/jquery.ztree-2.6.min.js"></script> 
  <script type="text/javascript" src="<%=path%>/js/local/match/viewCategoryMappingInfoDetail.js"></script> 
</HEAD> 

<BODY> 
<center class="headTitle">目录映射</center> 
<TABLE border=0 width="100%" class="tb1" align="center"> 
<tr align="center"> 
<td align=right valign=top width="45%"> 
<input id="yhdNodes" type="hidden" value="<%=yhdNodes %>"> 
<input id="path" type="hidden" value="<%=path%>"> 
<div style="height:45px;background-color:blue;width:222px;text-align:center"><h1>一号店目录</h1></div> 
<div class="zTreeCategoryBackground"> 
<ul id="yhdTree" class="tree"></ul> 
</div> 
</td> 
<td width="10%"><input type="button" value="保存目录关系" οnclick="saveMatchedRelations();"></td> 
<td align=left valign=top width="45%"> 
<input id="oppoNodes" type="hidden" value="<%=oppoNodes %>"> 
<input id="oppoSiteId" type="hidden" value="<s:property value='matchDto.siteId'/>"> 
<div style="height:45px;background-color:blue;width:222px;text-align:center"><h1><s:property value="matchDto.siteId"/>目录</h1></div> 
<div class="zTreeCategoryBackground"> 
<ul id="oppoTree" class="tree"></ul> 
</div> 
</tr> 
</TABLE> 
</BODY> 
</HTML> 

2,js

Js代码 复制代码 收藏代码
  1. $(function() {  
  2. $("input[type=button]").css("font-size","11px").css("border-radius","4px 4px 4px 4px").css("padding","0.4em 1em").css("font-family", "Verdana,Arial,sans-serif");  
  3. refreshTree1();  
  4. refreshTree2();  
  5. });  
  6.  
  7. var zTree1;  
  8. var zTree2;  
  9. var setting;  
  10. //var zTreeObj = zTree(setting, zTreeNodes);  
  11. //var nodes = zTreeObj.getCheckedNodes(); //或  zTreeObj.getCheckedNodes(true);  
  12. setting1 = {  
  13. isSimpleData : true, //采用id,pid,name三个参数来初始树需要加入的参数 
  14. treeNodeKey : "id",  
  15. treeNodeParentKey : "pId",  
  16. checkable : true,  
  17.     checkStyle : "radio",  
  18.     checkRadioType : "all",  
  19. callback: {  
  20. change: zTreeOnChange//当节点内容有变化时产生事件的函数  
  21. }  
  22. };  
  23. setting2 = {  
  24. isSimpleData : true,  
  25. treeNodeKey : "id",  
  26. treeNodeParentKey : "pId",  
  27. checkable: true  
  28. };  
  29.  
  30. function zTreeOnChange(event, treeId, treeNode) {  
  31. var path=$("#path").val();  
  32. var nodes = zTree1.getCheckedNodes();  
  33. if(nodes.length!=0){  
  34. var myUrl=path+"/match/getMathedOppoCategory.action";  
  35.     $.ajax({ //因为不清楚zTree客服端服务器端异步交互用到技术,就用jquery先上了 
  36.             url :myUrl,  
  37.             data: "matchDto.yhdId="+treeNode.id+"&matchDto.siteId="+$("#oppoSiteId").val(),  
  38.             cache : false,  
  39.             async : false,  
  40.             type : "POST",  
  41.             dataType : 'html',  
  42.             success : function (data){  
  43.         result=data;  
  44.             }  
  45.     });  
  46.    var arrResult=result.split(":");  
  47.    if(arrResult.length>0){  
  48.    for(var i=0;i<arrResult.length;i++){  
  49.    if(arrResult[i]!=""&&arrResult[i]!=null){  
  50.    var node=zTree2.getNodeByParam("id",arrResult[i]);  
  51.    node.checked=true;  
  52.    zTree2.expandNode(node,true,true);  
  53.    zTree2.updateNode(node, true);  
  54.    }  
  55.    }  
  56.    }  
  57. }  
  58. }  
  59. function getCheckBoxType() {  
  60. var type = { "Y":"", "N":""};//点击checkbox或者取消时是否对子节点checkbox产生影响ps  
  61. return type;  
  62. }  
  63. function refreshTree1() {//页面第一次加载时将某棵树进行初始化  
  64. var sNodes;  
  65. sNodes=$("#yhdNodes").val(); //从页面jsp中取得树节点信息,当前为list<String> 
  66. sNodes=eval('('+sNodes+')'); //转化为json格式数据 
  67. var checkType = getCheckBoxType(); //获得页面checkbox级联选中还是非级联等 
  68. zTree1 = $("#yhdTree").zTree(setting1,sNodes); //此处为初始化页面瓶颈,时间较长 
  69. $("#checkTypeCode").html("{\"Y\":" + checkType.Y + ", \"N\":" + checkType.N + "}");  
  70. }  
  71. function refreshTree2() {  
  72. var sNodes;  
  73. sNodes=$("#oppoNodes").val();  
  74. sNodes=eval('('+sNodes+')');  
  75. var checkType = getCheckBoxType();  
  76. setting2.checkType = checkType;  
  77. zTree2 = $("#oppoTree").zTree(setting2,sNodes);  
  78. $("#checkTypeCode").html("{\"Y\":" + checkType.Y + ", \"N\":" + checkType.N + "}");  
  79. }  
  80.  
  81. function saveMatchedRelations(){  
  82. var path=$("#path").val();  
  83. var nodes1 = zTree1.getCheckedNodes();  
  84. var nodes2= zTree2.getCheckedNodes();  
  85. var targetStr="";  
  86. for(var i=0;i<nodes2.length;i++){  
  87. targetStr+=nodes2[i].id+";";  
  88. }  
  89. window.location=path+"/match/saveMatchedRelations.action?matchDto.yhdId="+nodes1[0].id+"&matchDto.siteId="+$("#oppoSiteId").val()+"&targetStr="+targetStr;  
  90. }  


3,action

Java代码 复制代码 收藏代码
  1. public String getCategoryMappingInfoDetail(){  
  2. try {  
  3. yhdCategoryList=yhdCategoryService.getAllYhdCategory();  
  4. List yhdNodes=new ArrayList();  
  5. for (YhdCategory o : yhdCategoryList) {  
  6. yhdNodes.add("{'id':"+o.getId()+",'name':'"+o.getCategoryName().replaceAll(" ","")+"','pId':"+o.getCategoryParenId()+"}");  
  7. }  
  8. opponentCategoryList=pisTCategoryService.getListCategoryBySiteId(matchDto.getSiteId());  
  9. List oppoNodes=new ArrayList();  
  10. for (PisTCategory o : opponentCategoryList) {  
  11. oppoNodes.add("{'id':"+o.getId()+",'name':'"+o.getCategoryName().replaceAll(" ","")+"','pId':"+o.getParentId()+"}");  
  12. }  
  13. request.setAttribute("yhdNodes", yhdNodes);  
  14. request.setAttribute("oppoNodes", oppoNodes);  
  15. } catch (Exception e) {  
  16. e.printStackTrace();  
  17. }  
  18. return SUCCESS;  
  19. }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值