EasyUI tree 异步树与采用扁平化实现的同步树
所谓好记性不如烂笔头,为了以防忘记,才写下这篇博客,废话不多。。
异步树:
tips: 可以采用easyui里的原始数据格式,也可以采用扁平化的数据格式。
使用场景: 当菜单模块数量庞大或者无限极,最好使用异步树,单节点展开访问后台,返回对应的子菜单。
必须要件: 只需要一个URL即可
前台核心JS:
<script type="text/javascript"> $(function(){ $('#tt').tree({ url: 'MenuSynServlet', lines:true/* , onLoadSuccess : function(node, data) { var t = $(this); if (data) { $(data).each(function(index, d) { if (this.state == 'closed') { t.tree('expandAll'); } }); } } */ }); }); </script>
如果菜单比较少,也可以用异步树一次性加载 全部展开,把onLoadSuccess这段注释打开即可
后台Servlet:
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String key = req.getParameter("id"); DbUtil db= new DbUtil(); Connection conn = null; List<EasyuiTreeNode> tree = new ArrayList<EasyuiTreeNode>(); if(StringUtil.isEmpty(key)){ try { conn = db.getCon(); PreparedStatement ps = conn.prepareStatement("SELECT id,title FROM db_menus WHERE pid = 0"); ResultSet rs= ps.executeQuery(); while(rs.next()){ EasyuiTreeNode node = new EasyuiTreeNode(); node.setId(rs.getString("id")); node.setState(existsText(conn,rs.getString("id"))? "closed":"open"); //如果想默认都是以文件夹形式显示,这样设置:node.setState("closed"); node.setTitle(rs.getString("title")); tree.add(node); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }else{ try { conn = db.getCon(); PreparedStatement ps = conn.prepareStatement("SELECT id,title FROM db_menus WHERE pid = ?"); ps.setString(1, key); ResultSet rs= ps.executeQuery(); while(rs.next()){ EasyuiTreeNode node = new EasyuiTreeNode(); node.setId(rs.getString("id")); node.setState((existsText(conn,key)? "open":"closed")); node.setTitle(rs.getString("title")); tree.add(node); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } String json = JSON.toJSONString(tree); resp.setContentType("text/html;charset=utf-8"); PrintWriter out=resp.getWriter(); out.println(json); out.flush(); out.close(); } private boolean existsText(Connection conn,String pid) throws SQLException{ PreparedStatement ps = conn.prepareStatement("SELECT COUNT(1) num FROM db_menus WHERE pid = ?"); boolean isClosed = true; ps.setString(1, pid); ResultSet rs = ps.executeQuery(); if(rs.next()){ String count = rs.getString("num"); if("0".equals(count)){ isClosed = false; } } return isClosed; } }
同步树:
tips:这里采用扁平化的json格式实现,easyui tree 模仿ztree 使用扁平化加载json 原文链接:http://www.cnblogs.com/liaojie970/p/5319252.html
使用场景:菜单模块少 可以采用(PS:跟异步树一次性加载区别在于:同步树一次性加载 请求post一次,异步树因为采用了递归展开,请求post N次)
必须条件:数据格式要配制成ztree的数据格式(id,pid)
前台JS代码:
<script type="text/javascript" src="<%=basePath%>/js/jquery-easyui-1.5.1/plugins/jquery.tree_expand.js"></script> <script type="text/javascript"> //实例化。这里增加了三个属性,可以指定idFiled,textFiled和parentField。所以这里的simpleData可以不严格转换成tree的数据格式。 $(function(){ $('#tt').tree({ url: 'MenuSynServlet', parentField:"pid", textFiled:"title", idFiled:"id", lines:true }); }); </script>
后台Servlet代码:
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //String key = req.getParameter("id"); DbUtil db= new DbUtil(); Connection conn = null; List<EasyuiTreeNode> tree = new ArrayList<EasyuiTreeNode>(); try { conn = db.getCon(); PreparedStatement ps = conn.prepareStatement("SELECT id,pid,title FROM db_menus"); ResultSet rs= ps.executeQuery(); while(rs.next()){ EasyuiTreeNode node = new EasyuiTreeNode(); node.setId(rs.getString("id")); node.setPid(rs.getString("pid")); node.setState(existsText(conn,rs.getString("id"))? "closed":"open"); //如果想默认都是以文件夹形式显示,这样设置:node.setState("closed"); node.setTitle(rs.getString("title")); tree.add(node); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } String json = JSON.toJSONString(tree); System.out.println(json); resp.setContentType("text/html;charset=utf-8"); PrintWriter out=resp.getWriter(); out.println(json); out.flush(); out.close(); } private boolean existsText(Connection conn,String pid) throws SQLException{ PreparedStatement ps = conn.prepareStatement("SELECT COUNT(1) num FROM db_menus WHERE pid = ?"); boolean isClosed = true; ps.setString(1, pid); ResultSet rs = ps.executeQuery(); if(rs.next()){ String count = rs.getString("num"); if("0".equals(count)){ isClosed = false; } } return isClosed; }
附上数据脚本:
CREATE TABLE db_menus( id ) NOT NULL AUTO_INCREMENT, pid ) NOT NULL, title ) DEFAULT NULL, url ) DEFAULT NULL, PRIMARY KEY (id ) )ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='菜单表' DROP TABLE db_menus ,'项目管理',NULL); ,'任务管理',NULL); ,'考勤管理',NULL); ,'报销管理',NULL); ,'绩效管理',NULL); ,'通讯录管理',NULL); ,'个人周报查询',NULL); ,'项目周报查询',NULL); ,'个人周报填写',NULL); ,'项目周报填写',NULL); ,'我的任务',NULL); ,'指定任务',NULL); ,'派出申请',NULL); ,'加班申请',NULL); ,'请假申请',NULL); ,'我的报销',NULL); ,'报销审批',NULL); ,'绩效考核填报',NULL); ,'绩效考核审核',NULL); ,'通讯录',NULL);
EasyUI tree 异步树与采用扁平化实现的同步树的更多相关文章
- spring mvc easyui tree 异步加载树
使用spring mvc 注解 异步加载一棵树 jsp: <ul id="orgInfoTree"></ul> $(function(){ loadOrgT ...
- jquery easyui tree异步加载子节点
easyui中的树可以从标记中建立,也可以通过指定一个URL属性读取数据建立.如果想建立一棵异步树,需要为每个节点指定一个id属性值,这样在加载数据时会自动向后台传递id参数. <ul id=& ...
- MVC4中EasyUI Tree异步加载JSON数据生成树
1,首先构造tree接受的格式化数据结构MODEL /// <summary> /// 定义EasyUI树的相关数据,方便控制器生成Json数据进行传递 /// </summar ...
- 16个时髦的扁平化设计的 HTML5 & CSS3 网站模板
创建网站最好办法之一是使用现成的网站模板或使用开源 CMS 应用程序.所以,今天这篇文章给大家带来的是16款基于 HTML5 & CSS3 的精美的扁平风格网站模板,大家可以借助这些优秀的网站 ...
- [转]easyui tree 模仿ztree 使用扁平化加载json
原文地址:http://my.oschina.net/acitiviti/blog/349377 参考文章:http://www.jeasyuicn.com/demo/treeloadfilter.h ...
- 数据网格和树-EasyUI Datagrid 数据网格、EasyUI Propertygrid 属性网格、EasyUI Tree 树、EasyUI Treegrid 树形网格
EasyUI Datagrid 数据网格 扩展自 $.fn.panel.defaults.通过 $.fn.datagrid.defaults 重写默认的 defaults. 数据网格(datagrid ...
- 【EasyUI学习-2】Easyui Tree的异步加载
作者:ssslinppp 1. 摘要 2. tree的相关介绍 3. 异步加载tree数据,并实现tree的折叠展开 3.1 功能说明: 3.2 前台代码 3.3 后台代码 4. 其他 1 ...
- EasyUI Tree 树
转自:http://www.jeasyui.net/plugins/185.html 通过 $.fn.tree.defaults 重写默认的 defaults. 树(tree)在网页中以树形结构显示分 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(50)-Easyui 扁平化皮肤
最近抽了点时间仿做了点皮肤,只供欣赏!扁平化
随机推荐
- poj——2367 Genealogical tree
Genealogical tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6025 Accepted: 3969 ...
- Java度线程——生产消费问题
/*JDK1.4版本:生产者,消费者.多生产者,多消费者的问题.if判断标记,只有一次,会导致不该运行的线程运行了.出现了数据错误的情况.while判断标记,解决了线程获取执行权后,是否要运行! no ...
- Java DynamoDB 增加、删除、修改、查询
准备jar包 <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sd ...
- how to read openstack code : stevedore
学习了WSGI/Paste deploy后,还需要对一些在openstack中一些package有一些了解,才能更好的理解openstack的代码 What is stevedore 我们在写代码的时 ...
- HDD
硬盘 SCSI ★ Host adapter ★ SCSI standard ★ Bus socket ★ Signal fashion ★ SCAM ★ Bus main control ★ Dri ...
- Windows 7 SID 修改
在安裝Windows系統時會產生一個獨一無二的SID (Security ID),它用來識別每一部主機,若在同一個區域網路內有兩部相同SID的主機,會出現警告訊息.一般而言,每次安裝時的SID不可能會 ...
- 文件权限的获取,cmd命令:Takeown
takeown /f * /a /r /d y #强制将当前目录下的所有文件及文件夹.子文件夹下的所有者更改为管理员组(administrators)命令: cacls d:documents*.* ...
- 解决Vue打包后背景图片路径错误问题
1.原因解析 当用vue-cli自动构建项目后,有两种运行方法,分别是: npm run dev : 提供一个开发的环境,自动热更新,资源使用绝对路径,所以可以正常看到背景图片. npm run bu ...
- web 开发之js---js 中的数组操作
js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了,先给个我测试的代码^-^var arr = new Array();arr[0] = "aaa";arr[1] ...
- Mac OS X 10.10下Versions crash的问题
升级完系统.Versions由于兼容性到问题,各种闪退,网上搜索了一下.知乎到一个帖子提到了暂时解决的方法,例如以下: Blackpixel 正在研究此崩溃的修复方案.暂时解决方式例如以下: 在文本编 ...