zTree checkbox 异步加载

jsp部分:


<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<%@ include file="/common/taglibs.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
	<title>${applicationName}</title>
	<link rel="stylesheet" type="text/css" href="${ctx}/css/${skinId}/style.css" />
	<link rel="stylesheet" href="${ctx}/css/zTreeStyle/zTreeStyle.css" type="text/css">
	<script type="text/javascript" src="${ctx}/js/jquery/jquery-1.7.1.min.js"></script>
	<script type="text/javascript" src="${ctx}/js/zTree_v3/jquery.ztree.core-3.5.js"></script>
	<script type="text/javascript" src="${ctx}/js/zTree_v3/jquery.ztree.excheck-3.5.js"></script>
	<script type="text/javascript" src="${ctx}/js/comm/GeneralPageOperation.js"></script>
	<!--
	  -- 创建人:liyafei
	  -- 创建时间:2014-06-25
	  -- 备注:新建
	  -- @version 1.0
	  -- 说明:	此页面是组织多选页面,
	  			父页面必须有 id="orgIds",id="orgNames" 的两个标签,
	  			分别是选择后的id值,name值,值中间用","隔开
	  			
	-->
	<script type="text/javascript">
		<!--
		var setting = {
			async: {
				enable: true,
				url:"org-tree!ajaxOrgTreeCheck.action",	//异步请求地址
				autoParam:["id", "name=n", "level=lv"],
				dataFilter: filter
			},
			check: {
				enable: true,
				chkStyle: "checkbox",				//多选
				chkboxType: { "Y" : "", "N" : "" }	//不级联父节点选择
			}
		};

		function filter(treeId, parentNode, childNodes) {
			if (!childNodes) return null;
			for (var i=0, l=childNodes.length; i<l; i++) {
				childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.');
			}
			return childNodes;
		}
		$(document).ready(function(){
			$.fn.zTree.init($("#treeDemo"), setting);
		});
		
		//保存选中的组织
		 function saveOrg() {
         	var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
         	//获得选中所有节点,返回值 Array(JSON)
			var nodes = treeObj.getCheckedNodes(true);
            var str_id = ""; 
            var str_name = ""; 
            //遍历选中的节点  Array(JSON)
			for (var node in nodes){ 
				for(var key in nodes[node]){ 
					//只取JSON中的 id,name的值
					if("id" == key){
						if(str_id!=""){
						 	str_id = str_id + ',' + nodes[node][key]; 
						}else{
							str_id += nodes[node][key]; 
						}
					}
					if("name" == key){
						if(str_name!=""){
						 	str_name = str_name + ',' + nodes[node][key]; 
						}else{
							str_name += nodes[node][key]; 
						}
					}
				} 
			} 
			//把选择的值 赋值给父页面,父页面必须有 id="orgIds",id="orgNames" 的两个标签接收
             window.parent.document.getElementById("orgIds").value = str_id;
             window.parent.document.getElementById("orgNames").value = str_name;
            sonCloseWindow(1);	//关闭弹出的本页面
          }
		//-->
	</script>

</head>

<body>
<form action="">
<div class="content_wrap">
	<div class="zTreeDemoBackground left">
		<ul id="treeDemo" class="ztree"></ul>
	</div>
	
</div>
	<table width="100%" class="UTry-FormStyle">
          <tr>
            <td class="TextTd" colspan="3" align="center">
            <br />
              <input type="button" value="确定" class="buttonGM" οnclick="saveOrg();" />
              <input type="button" value="关闭" class="buttonGM" οnclick="sonCloseWindow(1);return false;" />
            </td>
          </tr>
        </table>
      </form>
</body>
</html>



action部分



/**
	 * 
	* 方法名: ajaxOrgTreeCheck
	* 方法描述: (组织多选)
	* 创建人:liyafei 
	* 修改时间:2014-6-25 上午11:32:36 
	* 参数 @throws IOException 参数说明
	* 返回类型 void 返回类型
	* @throws
	 */
	public void ajaxOrgTreeCheck() throws IOException{  
		//第一次加载根节点
		if (StringUtil.isBlank(this.id)) {
			UserModel user = (UserModel) Struts2Utils.getSession().getAttribute(Constants.USER_SESSION_ID);
			//根节点对象: 获得当前登录用户拥有权限的最高级组织
			rootOrg = orgService.maxViewOrg(user);
			Struts2Utils.getSession().setAttribute(Constants.GROUP_SESSION_ID, rootOrg.getId());
			
			JSONObject json=new JSONObject();
		    json.put("id",rootOrg.getId());			//根节点id
		    json.put("name", rootOrg.getName());	//根节点名称
		    json.put("pid", rootOrg.getP_id());		//父节点id
		    //查询是否有子节点
		    List<OrgModel> listChlil = orgService.getChildrenByPIdAndMaxId(rootOrg.getId(), Struts2Utils.getSession().getAttribute(Constants.GROUP_SESSION_ID).toString());
		    if(!listChlil.isEmpty()){
		    	json.put("isParent", true);
		    	json.put("icon", "/js/jstree/themes/default/depar1.png");
		    }else{
		    	json.put("icon", "/js/jstree/themes/default/depar2.png");
		    }
			this.ajaxHttpResponseWriter(json);
		//加载子节点
		}else{
			//查询子节点
			List<OrgModel> list = orgService.getChildrenByPIdAndMaxId(id, Struts2Utils.getSession().getAttribute(Constants.GROUP_SESSION_ID).toString());
			
			JSONArray jsonArr = new JSONArray();
			  
			for(OrgModel org :list){
			    JSONObject json=new JSONObject();
			    json.put("id",org.getId());			//节点id
			    json.put("name", org.getName());	//节点名称
			    json.put("pid", org.getP_id());		//父节点id
			    //查询是否有子节点
			    List<OrgModel> listChlil = orgService.getChildrenByPIdAndMaxId(org.getId(), Struts2Utils.getSession().getAttribute(Constants.GROUP_SESSION_ID).toString());
			    if(!listChlil.isEmpty()){
			    	json.put("isParent", true);			//是否有子节点
			    	json.put("icon", "/js/jstree/themes/default/depar1.png");
			    }else{
			    	json.put("icon", "/js/jstree/themes/default/depar2.png");
			    	
			    }
			    jsonArr.put(json);
			}
			this.ajaxHttpResponseWriter(JSONArray.fromObject(jsonArr));
		}
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
zTree可以通过异步加载数据来实现动态菜单。具体步骤如下: 1. 初始化zTree时,设置异步加载参数,包括异步请求的URL、请求方法、请求参数等。 2. 当需要加载动态数据时,调用zTree异步加载方法,传入请求参数。 3. 服务器接收到请求参数后,根据参数查询数据库或其他数据源,生成对应的数据,并返回给前端。 4. 前端接收到响应数据后,将数据转换成zTree所需的JSON格式,并调用zTree的更新节点数据方法,将数据更新到zTree中即可。 示例代码如下: ``` // 初始化zTree var setting = { async: { enable: true, // 开启异步加载 url: "dynamicMenu.php", // 异步请求的URL type: "POST", // 请求方法 autoParam: ["id"], // 请求参数 dataType: "json" // 响应数据类型 } }; var zTreeObj = $.fn.zTree.init($("#tree"), setting); // 加载动态数据 zTreeObj.reAsyncChildNodes(null, "refresh"); ``` 服务器端代码示例(PHP): ``` // 获取请求参数 $id = isset($_POST['id']) ? intval($_POST['id']) : 0; // 查询数据库获取节点数据 $nodes = array(); if ($id == 0) { // 查询根节点 $nodes[] = array( 'id' => 1, 'name' => '根节点', 'isParent' => true ); } else { // 查询子节点 $result = mysql_query("SELECT * FROM menu WHERE parent_id=$id"); while ($row = mysql_fetch_array($result)) { $nodes[] = array( 'id' => $row['id'], 'name' => $row['name'], 'isParent' => $row['has_child'] == 1 ); } } // 返回响应数据 echo json_encode($nodes); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值