easyUI treeGrid异步加载,前端+后台实现,包括增删改等具体功能
来源:互联网 发布:python unicode转中文 编辑:程序博客网 时间:2024/06/03 22:51
说明
前端使用的是easyUI 1.3.6+jq
后台使用的是springMVC
初始化调用后台getCourse方法,返回的json数据格式如下:
{"total":3,"rows":[ {"id":1,"typeName":"All Tasks","description":"3/4/2010","sort":"3/20/2010"}, {"id":2,"typeName":"All Tasks","description":"3/4/2010","sort":"3/20/2010","_parentId":1}, {"id":3,"typeName":"All Tasks","description":"3/4/2010","sort":"3/20/2010","_parentId":2}] }
保存一行数据,用js取得row的数据,再转化为json,调用saveCourseType传到后台。
删除一行,取得行id,调用deleteCourseType删除数据。
前端代码
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>CheckBox Tree - jQuery EasyUI Demo</title> <link rel="stylesheet" type="text/css" href="<%=contextPath%>/js/easyui-1.3.6/themes/metro-blue/easyui.css"> <link rel="stylesheet" type="text/css" href="<%=contextPath%>/js/easyui-1.3.6/themes/icon.css"> <link rel="stylesheet" type="text/css" href="<%=contextPath%>/js/css/demo.css"> <script type="text/javascript" src="<%=contextPath%>/js/easyui-1.3.6/jquery.min.js"></script> <script type="text/javascript" src="<%=contextPath%>/js/easyui-1.3.6/jquery.easyui.min.js"></script><title>可编辑的表格树</title></head>//菜单栏<div data-options="region:'north',title:''" style="height: 25px; padding: 5px;"> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-edit'" onclick="beginEdit()">编辑</a> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-save'" onclick="saveEdit()">保存编辑</a> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-add'" onclick="appendRoot()">新增根目录</a> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-add'" onclick="append()">新增目录</a> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" onclick="removeIt()">删除</a> </div>//treegrid主表 <table id="tg" class="easyui-treegrid" title="课程分类编辑" style="width: 900px; height: 600px" data-options=" iconCls: 'icon-ok', rownumbers: true, animate: true, fitColumns: true, url: '<%=contextPath%>/courseType/getCourseType', method: 'get', idField: 'id', treeField: 'typeName', onBeforeExpand:function(row){ $('#tg').treegrid('options').url = '<%=contextPath%>/courseType/getCourseType?parentId='+row.id; }, onContextMenu: onContextMenu "> <thead> <tr> <th data-options="field:'typeName',width:70,editor:'text'">名称</th> <th data-options="field:'description',width:50,editor:'text'">描述</th> <th data-options="field:'sort',width:20,editor:'text'">排序</th> </tr> </thead> </table>//右键菜单选项 <div id="mm" class="easyui-menu" style="width: 120px;"> <div onclick="append()" data-options="iconCls:'icon-add'">新增</div> <div onclick="removeIt()" data-options="iconCls:'icon-remove'">删除</div> <div class="menu-sep"></div> <div onclick="collapse()">收起</div> <div onclick="expand()">展开</div> </div>
JS代码
<script type="text/javascript"> //treegrid 的js代码 //编辑目录 var editingId=null; function ff(row) { $('#tg').treegrid('options').url ='<%=contextPath%>/courseType/getCourseType?parentId='+row.id; } function formatProgress(value) { if (value) { var s = '<div style="width:100%;border:1px solid #ccc">' + '<div style="width:' + value + '%;background:#cc0000;color:#fff">' + value + '%' + '</div>' '</div>'; return s; } else { return ''; } } function onContextMenu(e, row) { if (row) { e.preventDefault(); $(this).treegrid('select', row.id); $('#mm').menu('show', { left : e.pageX, top : e.pageY }); } }//生成节点ID function uuid() { var s = []; var hexDigits = "0123456789abcdef"; for (var i = 0; i < 36; i++) { s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1); } s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010 s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01 s[8] = s[13] = s[18] = s[23] = ""; var uuid = s.join(""); return uuid; }//添加节点 function append() { if (editingId != null){ $.messager.alert("提示信息", "请先保存"); return; } var uid=uuid(); var node = $('#tg').treegrid('getSelected'); expand(); var parentId; if(node) parentId=node.id; else parentId=null; $('#tg').treegrid('append', { parent : parentId, data : [ { id : uid, typeName : '', sort :'1' } ] }) editingId=uid; if (editingId != null){ $('#tg').treegrid('select', editingId); } $('#tg').treegrid('beginEdit', editingId); }//添加跟节点 function appendRoot() { if (editingId != null){ $.messager.alert("提示信息", "请先保存"); return; } var uid=uuid(); var node = $('#tg').treegrid('getSelected'); expand(); $('#tg').treegrid('append', { parent : null, data : [ { id : uid, typeName : '', sort :'1' } ] }) editingId=uid; if (editingId != null){ $('#tg').treegrid('select', editingId); } $('#tg').treegrid('beginEdit', editingId); }//移除节点 function removeIt() { if (editingId != null){ $.messager.alert("提示信息", "请先保存"); return; } var node = $('#tg').treegrid('getSelected'); if (node==null) $.messager.alert("提示信息", "请选择一个节点"); if (node) { var dataObj = {}; ajaxCall("get", contextPath+'/courseType/deleteCourseType?id='+node.id, dataObj, function(XMLHttpRequest, data) { $.messager.alert("提示信息", "删除成功"); }, function(XMLHttpRequest) { }); $('#tg').treegrid('remove', node.id); } } function collapse() { var node = $('#tg').treegrid('getSelected'); if (node) { $('#tg').treegrid('collapse', node.id); } }//展开节点 function expand() { var node = $('#tg').treegrid('getSelected'); if (node) { $('#tg').treegrid('expand', node.id); } }//开始编辑 function beginEdit(){ if (editingId != null){ $('#tg').treegrid('cancelEdit', editingId); $('#tg').treegrid('select', editingId); editingId = null; return; } var row = $('#tg').treegrid('getSelected'); if (row){ editingId = row.id $('#tg').treegrid('beginEdit', editingId); } }//保存编辑 function saveEdit(){ if (editingId != null){ var t = $('#tg'); t.treegrid('endEdit', editingId); $('#tg').treegrid('select', editingId); var row = $('#tg').treegrid('getSelected'); var dataObj = {}; dataObj.rows = JSON.stringify(row); ajaxCall("post", contextPath+'/courseType/saveCourseType', dataObj, function(XMLHttpRequest, data) { $.messager.alert("提示信息", "保存成功"); }, function(XMLHttpRequest) { }); editingId = null; } } </script>
后台java代码
//获取treegrid列表@RequestMapping(value = "/getCourseType") public @ResponseBody Map<String,Object> tree_data(HttpServletRequest request) throws Exception { String parentId = ConvertUtils.cStr(request.getParameter("parentId")); Map<String, Object> param = new HashMap<String,Object>(); List<CourseType> courseTypes = new ArrayList<CourseType>(); if(StringUtils.isNotEmpty(parentId)){ courseTypes = courseTypeService.queryTree(null, parentId,null); } else { courseTypes = courseTypeService.queryTree(null, null,"1"); } List<Map<String,Object>> dateList = new ArrayList<Map<String,Object>>(); if(courseTypes.size()>0){ Map<String,Object> map = null; Map<String, Object> params = new HashMap<String,Object>(); for(CourseType courseType:courseTypes){ map = new HashMap<String,Object>(); map.put("id", courseType.getId()); map.put("typeName", courseType.getTypeName()); map.put("sort", courseType.getSort()); map.put("description", courseType.getDescription()); if(StringUtils.isEmpty(courseType.getParentId())){ map.put("_parentId", null); } else{ map.put("_parentId", courseType.getParentId()); } //根据id判断是否有子节点 params.put("parentId", courseType.getId()); int count = courseTypeService.querySelectRowCount(params); if(count>0){ map.put("state", "closed"); } dateList.add(map); } } param.put("rows", dateList); return param; }//保存treegrid的某一列 @RequestMapping(value = "/saveCourseType", method = RequestMethod.POST) public @ResponseBody int saveDirectory(HttpServletRequest request) throws Exception { Map<String, Object> params = CommonUtil.getNewSqlMap(); String rows = ConvertUtils.cStr(request.getParameter("rows")); Map<String,String> map=JsonParser.parseJsonStrNull(rows); params.put("id",map.get("id")); params.put("typeName",map.get("typeName")); params.put("description", map.get("description")); params.put("parentId", map.get("_parentId")); params.put("sort", map.get("sort")); params.put("delFlag", 0); String parentIds=map.get("_parentId")+","; String parentId=map.get("_parentId"); while(true){ parentId=courseTypeService.findParentId(parentId); if(StringUtils.isEmpty(parentId)){ break; } parentIds=parentIds+parentId+","; } params.put("parentIds", parentIds); if(courseTypeService.updateObject(params)==0){ courseTypeService.saveObject(params); } return 1; } //删除某一行 @RequestMapping(value = "/deleteCourseType") public @ResponseBody Map<String, Object> deleteDirectory(HttpServletRequest request) throws Exception { String id=ConvertUtils.cStr(request.getParameter("id")); Map<String,Object> result = new HashMap<String, Object>(); Map<String, Object> params = CommonUtil.getNewSqlMap(); params.put("id",id); courseTypeService.deleteObject(params); return result; }
注意事项
1.后台传回的json数据的key,必须与前端treegrid的表头name相对应。
2.要使用编辑功能,前端表头必须加入editor:’text’参数,具体类型参见官方文档。
3.后台传回的参数如果包含state参数,state为closed代表该节点具有子节点。
4.后台传回的json数据必须有一个以上是不包含_parentId字段的,也就是必须要有父节点,否则无法显示。
0 0
- easyUI treeGrid异步加载,前端+后台实现,包括增删改等具体功能
- Jquery EasyUI TreeGrid异步加载
- EASYUI TREEGRID异步加载数据
- jQuery EasyUI treegrid 增删改查 - 1
- jQuery EasyUI treegrid 增删改查 - 2
- jQuery EasyUI treegrid 增删改查 - 3
- 【easyui】treeGrid实现分页以及异步加载子节点
- jQuery EasyUI treegrid异步加载数据
- SSM+EasyUI整合,简单实现后台增删改查操作
- EasyUI的TreeGrid查询功能实现
- datatables实现异步加载与增删改查
- ASP.NET实现增删改查等功能(Access版)
- easyui treegrid逐步加载
- easyui treegrid 懒加载
- easyui-treegrid 加载数据格式
- TreeGrid 异步加载节点
- ext treegrid 异步加载
- treegrid 异步加载
- 【翻译】Java 面向对象编程基本概念
- RTCP TMMBR字段解析
- nginx变量
- .pch文件的作用及常见的一些问题
- java中float的取值范围
- easyUI treeGrid异步加载,前端+后台实现,包括增删改等具体功能
- #90 k Sum II
- centos7安装npm和nodejs
- 线性表基本操作
- 火狐浏览器内容默认样式表
- NYOJ49 开心的小明 DFS/01背包
- CPISI training and certification
- Linux间进程通信方式
- light oj 1094(初学邻接表)