zTree树实现

1.//返回json字符串,为zTree提供数据  {id:"",pId:"",name:"",checked:"true|false"}

/**
	 * 为了使用 zTree树,就要组织好zTree树所使用的json数据
	 * json数据结构如下:
	 * [{"id":"模块的id","pId":"父模块id","name":"模块名","checked":"true|false"},{"id":"模块的id","pId":"父模块id","name":"模块名","checked":"true|false"}]
	 * 
	 * 常用的json插件有哪些?
	 * json-lib    fastjson     struts-json-plugin-xxx.jar,手动拼接
	 * 
	 * 如何输出?
	 * 借助于response对象输出数据
	 */
	public String roleModuleJsonStr() throws Exception{
		
		//通过角色id加载出当前的角色
		Role role=roleService.get(Role.class, model.getId());
		//通过对象导航的方式加载当前用户下的模块
		Set<Module> modules = role.getModules();
		//加载所有的模块列表
		List<Module>moduleList=moduleService.find("from Module where state=1", Module.class, null);
		StringBuilder sb=new StringBuilder();
		int size=moduleList.size();
		
		sb.append("["); 
		for (Module module : moduleList) {
			size--;
			sb.append("{\"id\":\"").append(module.getId());
			sb.append("\",\"pId\":\"").append(module.getParentId());
			sb.append("\",\"name\":\"").append(module.getName());
			sb.append("\",\"checked\":\"");
			if(modules.contains(module)){
				sb.append("true");
			}else{
				sb.append("false");
			}
			sb.append("\"}");
			if(size>0){
				sb.append(",");
			}
		}
		sb.append("]");
		
		//得到json对象
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setContentType("application/json;charset=UTF-8");
		response.setHeader("Cache-Control", "no-cache");
		//使用json对象返回json串
		response.getWriter().write(sb.toString());
		System.out.println("拼接后的json字符串:"+sb.toString());
		return NONE;
	}

2.导入zTree相关的js及css

<link rel="stylesheet" href="${ctx }/components/zTree/css/zTreeStyle/zTreeStyle.css" type="text/css" />

<script type="text/javascript" src="${ctx }/components/zTree/js/jquery1.4.4.min.js"></script>
<script type="text/javascript" src="${ctx }/components/zTree/js/jquery.ztree.core-3.5.min.js"></script>
	<script type="text/javascript" src="${ctx }/components/zTree/js/jquery.ztree.excheck-3.5.min.js"></script>

3、编写代码

<script type="text/javascript">
		var zTreeObj;
		var setting = {
			check : {
				enable : true
			},
			data : {
				simpleData : {
					enable : true
				}
			}
		};
		
		$(document).ready(function() {
			$.ajax( {
				url : "${ctx}/sysadmin/roleAction_roleModuleJsonStr.action?id=${id}",
				type : "get",
				dataType : "text",
				success : initZtree
			});
		});
		
		//初始化ZTree树
		function initZtree(data) {
			var zNodes = eval("(" + data + ")");		//动态js语句
			zTreeObj = $.fn.zTree.init($('#jkTree'), setting, zNodes);	//jkTree 树的id,支持多个树
			zTreeObj.expandAll(true);		//展开所有树节点
		}
		
		//获取所有选择的节点
		function submitCheckedNodes(treeNode) {
			var nodes = new Array();
			nodes = zTreeObj.getCheckedNodes(true);		//取得选中的结点
			var str = "";
			for (i = 0; i < nodes.length; i++) {
				if (str != "") {
					str += ",";
				}
				str += nodes[i].id;
			}
			$('#moduleIds').val(str);
		}
	</script>

4、RoleAction中保存选中的模块

/**
	 * 保存所有的节点
	 */
	public String module() throws Exception{
		//根据id查询选中的角色
		Role role=roleService.get(Role.class, model.getId());
		
		Set<Module>moduleSet=new HashSet<Module>();
		//分割接收模块的id
		if(moduleIds!=null){
			String[] ids=moduleIds.split(",");
			for (String id : ids) {
				moduleSet.add(moduleService.get(Module.class, id));
			}
		}
		//将模块设置到角色中去
		role.setModules(moduleSet);
		//保存角色
		roleService.saveOrUpdate(role);
		return "alist";
	} 
	private String moduleIds;
	public void setModuleIds(String moduleIds) {
		this.moduleIds = moduleIds;
	}

猜你喜欢

转载自blog.csdn.net/qq1424035130/article/details/83183351
今日推荐