MVC+ZTree使用的例子

本文介绍如何在网页中实现树形结构的弹出窗口,包括ZTree组件的引入、树形弹窗的调用方法及后台接口设计,最后展示了如何通过前端脚本解析JSON数据并呈现树形结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 导入相关ZTree的相关JS,CSS文件:

<link rel="stylesheet" type="text/css" href="<@full_path path="css/zTreeStyle/zTreeStyle.css"/>"/>

<link rel="stylesheet" type="text/css" href="<@full_path path="js/jBox/Skins/Default/jbox.css"/>"/>

<script src="<@full_path path="js/jquery.js"/>" type="text/javascript"></script>
<script src="<@full_path path="js/jquery.ztree.core-3.4.min.js"/>" type="text/javascript"></script>
<script src="<@full_path path="js/jquery.ztree.excheck-3.5.js"/>" type="text/javascript"></script>

<script src="<@full_path path="js/jBox/jquery.jBox-2.3.min.js"/>" type="text/javascript"></script>
<script src="<@full_path path="js/jBox/i18n/jquery.jBox-zh-CN.js"/>" type="text/javascript"></script>


2. 调用树形弹出框例子:

[java]  view plain copy
  1. <tr>  
  2.     <th>组织机构:</th>  
  3.     <td class="pn-fcontent"><input type="text" maxlength="20" class=""  readonly="readonly"  id="orgScope" name="orgScope" required="true"/>   
  4.     <input class="btn" type="button" value="选择" onclick="showPop('addOrgPop');"/> <label>  <font color="red">*</font></label> </td>  
  5.     <th>标签:</th>  
  6.     <td class="pn-fcontent"><input type="text" maxlength="20" class=""  readonly="readonly"  id="appTag" name="appTag" required="true"/>   
  7.     <input class="btn" type="button" value="选择" onclick="showPop('addTagPop');"/> <label>  <font color="red">*</font></label> </td>  
  8.   
  9. </tr>  

[java]  view plain copy
  1. var baseUrl = "<@full_path path="/"/>";  
  2.   
  3. //各种弹出框的JS调用方法  
  4. function showPop(type,url) {  
  5.     if('addParamsPop' == type) {  
  6.         $.jBox("iframe:<@full_path path="app/addParamsItem"/>", {  
  7.             title: "新增参数",  
  8.             width: 600,  
  9.             height: 300,  
  10.             buttons: { '关闭'true }  
  11.         });  
  12.     } else if('updateParamsPop' == type) {  
  13.         $.jBox("iframe:" + url, {  
  14.             title: "修改参数",  
  15.             width: 600,  
  16.             height: 300,  
  17.             buttons: { '关闭'true }  
  18.         });  
  19.     } else if('addOrgPop' == type) {  
  20.         var url = baseUrl + 'commonorg/getCheckboxTreeOrg?checkedInfo=' + $("#orgScope").val();  
  21.         $.jBox("iframe:" + url, {  
  22.             title: "组织选择",  
  23.             width: 600,  
  24.             height: 300,  
  25.             buttons: { '关闭'true }  
  26.         });  
  27.     } else if('addTagPop' == type) {  
  28.         var url = baseUrl + 'appTag/getCheckboxTreeTag?checkedInfo=' + $("#appTag").val();  
  29.         $.jBox("iframe:" + url, {  
  30.             title: "标签选择",  
  31.             width: 600,  
  32.             height: 300,  
  33.             buttons: { '关闭'true }  
  34.         });  
  35.     } else {  
  36.         //type传递空或者为close表示关闭窗口  
  37.         $.jBox.close(true);  
  38.     }  
  39. }  


3. 调用commonorg/getCheckboxTreeOrg?checkedInfo= 接口代码例子:

[java]  view plain copy
  1. package com.ffcs.icity.org.controller;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8. import javax.servlet.http.HttpServletRequest;  
  9.   
  10. import net.sf.json.JSONArray;  
  11.   
  12. import org.apache.commons.lang3.StringUtils;  
  13. import org.springframework.beans.factory.annotation.Autowired;  
  14. import org.springframework.stereotype.Controller;  
  15. import org.springframework.web.bind.annotation.RequestMapping;  
  16. import org.springframework.web.servlet.ModelAndView;  
  17.   
  18. import com.ffcs.icity.entity.IcityOrg;  
  19. import com.ffcs.icity.org.controller.vo.OrgReqParamVO;  
  20. import com.ffcs.icity.org.controller.vo.OrgVO;  
  21. import com.ffcs.icity.service.IIcityOrgService;  
  22.   
  23.   
  24.   
  25. /** 
  26.  * 向系统提供公共的相关组织机构操作界面,以及相关通用组织数据获取接口 
  27.  * @author linwei 
  28.  * @createtime 2013-3-20      
  29.  * 
  30.  */  
  31. @RequestMapping("/commonorg")  
  32. @Controller  
  33. public class CommonOrgController {  
  34.   
  35.     @Autowired  
  36.     private IIcityOrgService icityOrgService;  
  37.       
  38.     /** 
  39.      * 该方法通过userId以及token的相关校验,返回过滤后的数据页面至前台 
  40.      *  
  41.      */  
  42.     @RequestMapping("/getCheckboxTreeOrg")  
  43.     public ModelAndView getCheckboxTreeOrg(HttpServletRequest request,OrgReqParamVO orgReqParamVO) {  
  44.           
  45. //      //暂时不进行权限过滤  
  46. //      //针对外部传递的用户ID进行权限的过滤操作  
  47. //      if(StringUtils.isNotEmpty(orgReqParamVO.getUserId())) {  
  48. //            
  49. //      }  
  50.                   
  51.         Map<String, Object> params = new HashMap<String, Object>();  
  52.         List<IcityOrg> list = icityOrgService.search(params);  
  53.         List<OrgVO> orgVOList = new ArrayList<OrgVO>();  
  54.         Map checkedMap = this.parseCheckedInfo(orgReqParamVO.getCheckedInfo());  
  55.         OrgVO orgVO = null;  
  56.         for(IcityOrg icityOrg:list){  
  57.             orgVO = new OrgVO();  
  58.             orgVO.setId(String.valueOf(icityOrg.getId()));  
  59.             orgVO.setpId(String.valueOf(icityOrg.getParentId()));  
  60.             orgVO.setName(icityOrg.getName());  
  61.             orgVO.setCode(icityOrg.getCode());  
  62.             //如果长度小于4,说明为全国或者省份,需要自动展示下级节点  
  63.             if(icityOrg.getCode().length() < 2) {  
  64.                 orgVO.setOpen(true);  
  65.             } else {  
  66.                 //表示具体组织节点,无需自动展示下级节点  
  67.                 orgVO.setOpen(true);  
  68.             }  
  69.             //如果外部传递的参数中存在需要打钩的选项  
  70.             if(checkedMap.containsKey(String.valueOf(icityOrg.getId()))) {  
  71.                 orgVO.setChecked(true);  
  72.             } else {  
  73.                 orgVO.setChecked(false);  
  74.             }  
  75.               
  76.             orgVOList.add(orgVO);  
  77.         }  
  78.           
  79.         String json = JSONArray.fromObject(orgVOList).toString();  
  80.         ModelAndView modelAndView=new ModelAndView("/org/common/checkboxTreeOrg");  
  81.         modelAndView.addObject("json", json);  
  82.         return modelAndView;  
  83.     }  
  84.       
  85.       
  86.       
  87.     /** 
  88.      * 该方法通过解析外部传递的已勾选信息的字段,返回对应的MAP数据 
  89.      * @param checkedInfo   (格式为id_code_name;id_code_name) 
  90.      * @return 
  91.      * <pre> 
  92.      *  
  93.      * 
  94.      * </pre> 
  95.      */  
  96.     private Map parseCheckedInfo(String checkedInfo) {  
  97.           
  98.         Map map = new HashMap();  
  99.         if(StringUtils.isNotEmpty(checkedInfo)) {  
  100.             String[] orgArr = checkedInfo.split(";");  
  101.             String[] tempArr = null;  
  102.             for(int i=0;i<orgArr.length;i++) {  
  103.                 tempArr = orgArr[i].split("_");  
  104.                 map.put(tempArr[0], tempArr);  
  105.             }  
  106.         }  
  107.         return map;  
  108.     }  
  109.       
  110. }  

4. 展示JSON数据的树形结构页面:

[java]  view plain copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
  5.     <#include "/views/head.html"/>  
  6.     <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
  7.     <link rel="stylesheet" href="<@full_path path="css/treeAdmRegion.css"/>" type="text/css">  
  8.     <link rel="stylesheet" href="<@full_path path="css/zTreeStyle/zTreeStyle.css"/>" type="text/css">  
  9.     <script type="text/javascript">  
  10.           
  11.         var setting = {  
  12.             check: {  
  13.                       enable: true,                           //设置 zTree 的节点上是否显示 checkbox / radio  
  14.                       chkStyle:"checkbox",                    //勾选框类型(checkbox 或 radio)   
  15.                       chkboxType: { "Y""ps""N""ps" }    //父子级联关系  
  16.                    },  
  17.             data: {  
  18.                 simpleData: {  
  19.                     enable: true                              //true / false 分别表示 使用 / 不使用 简单数据模式  
  20.                 }  
  21.             }  
  22.         };  
  23.           
  24.         //树形结构JSON数据  
  25.         var datas =${json};  
  26.   
  27.         $(document).ready(function(){  
  28.             $.fn.zTree.init($("#ztree"), setting, datas);  
  29.             //获得整个树对象  
  30.             var treeObjs = $.fn.zTree.getZTreeObj("ztree");  
  31.             //获取输入框被勾选(true) 或 未勾选(false)的节点集合。  
  32.             var nodes = treeObjs.getCheckedNodes(true);  
  33.             initParentNodes(nodes,treeObjs);  
  34.               
  35.         });  
  36.           
  37.           
  38.         //初始化树形父节点打勾数据  
  39.         function initParentNodes(nodes,treeObjs) {  
  40.             for(var i=0;i<nodes.length;i++) {  
  41.                 var parentNode = nodes[i].getParentNode();  
  42.                 if(parentNode.checked == true) {  
  43.                       
  44.                 } else {  
  45.                     //如果父节点不为true,则设置成true,同时,继续更新更上一级父节点  
  46.                     parentNode.checked = true;  
  47.                     //更新树形节点属性方法  
  48.                     treeObjs.updateNode(parentNode);  
  49.                     //迭代循环  
  50.                     recursiveNode(parentNode.getParentNode(),treeObjs);               
  51.                 }  
  52.             }             
  53.         }  
  54.           
  55.        //递归相关节点数据     
  56.        function recursiveNode(node,treeObjs) {  
  57.             //alert("code is " + node.code + ",name is " + node.name);  
  58.             if(node != null) {  
  59.                 if(node.checked != true) {  
  60.                     node.checked = true;  
  61.                     treeObjs.updateNode(node);  
  62.                     recursiveNode(node.getParentNode(),treeObjs);  
  63.                 }  
  64.             }  
  65.        }  
  66.           
  67.        //返回值调用方法      
  68.        function returnValue() {  
  69.                   
  70.             var zTree = $.fn.zTree.getZTreeObj("ztree");  
  71.             //获取输入框被勾选(true) 或 未勾选(false)的节点集合。  
  72.             var nodes = zTree.getCheckedNodes(true);  
  73.             var res = "";  
  74.             for (var i = 0; i < nodes.length; i++) {  
  75.                 if(!nodes[i].getCheckStatus().half&&nodes[i].code.length==4)  
  76.                     res +=nodes[i].id+"_"+ nodes[i].code+"_"+nodes[i].name+";";  
  77.       
  78.             }            
  79.             //alert(res);  
  80.             window.parent.getOrgScope(res);  
  81.             window.parent.showPop();  
  82.       }   
  83.            
  84.     </script>  
  85. </head>  
  86.   
  87. <body>  
  88.   
  89. <div>  
  90.     <div>   
  91.         <ul id="ztree" class="ztree"></ul>    
  92.         <ul>                    
  93.                                 
  94.             <input type="button" value="确 定" onclick="returnValue();"></ul>  
  95.     </div>  
  96.       
  97.       
  98. </div>  
  99. </body>  
  100. </html>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值