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 扁平化皮肤
最近抽了点时间仿做了点皮肤,只供欣赏!扁平化
随机推荐
- codevs 3498 小木棍
3498 小木棍 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 乔治有一些同样长的小木棍,他把这些木棍随意 ...
- 无线安全课堂:手把手教会你搭建伪AP接入点
概述 *本文假设读者对设置伪AP接入点以及Apache配置有足够了解. 在本攻击场景中,我们将使用到alfa无线网卡以及用于网络访问的以太网连接(虚拟机环境下,物理机下无需此配置).你也可以使用虚拟接 ...
- python爬虫实践--求职Top10城市
前言 从智联招聘爬取相关信息后,我们关心的是如何对内容进行分析,获取用用的信息.本次以上篇文章“5分钟掌握智联招聘网站爬取并保存到MongoDB数据库”中爬取的数据为基础,分析关键词为“python” ...
- Ajax使用JSON数据格式
1: •JSON(JavaScriptObject Notation)一种简单的数据格式,比xml更轻巧.JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不须 ...
- Maven手工安装jar包到本地仓库
使用maven,少不了的就是要被"包下载失败"这种问题折腾. jar包下载失败后.我们选择手工把jar下载下来.(能够下载到指定jar的途经非常多) 以下随便找了一个jar包为例. ...
- 解决burp suite 使用chrome訪问https失真的问题
用burp suite 訪问https网页 尤其使用chrome(有时候firefox也会) 会出现js或者css载入不出来的情况 这样的时候,导出burp suite的证书,保存为cer格式 然后进 ...
- Android一些网站介绍
1.开源镜像: Android SDK在线更新镜像服务器 中国科学院开源协会镜像站地址: IPV4/IPV6: http://mirrors.opencas.cn 端口:80 IPV4/IPV6: h ...
- 【OI】Kruskal & ufs (克鲁斯卡与并查集)
Kruskal是有关于最小生成树的算法. 这个算法非常好理解,用一句话来概括就是: 从小到大找不同集合的边. 那么,具体是怎样的呢. 1.先把所有顶点初始化为一个连通分量. 2.从所有边中选择最小的( ...
- sql%found sql%notfound sql%rowcount sql%isopen
原文引入:http://blog.csdn.net/mh942408056/article/details/6949325 sql%found sql%notfound sql%rowcount sq ...
- 分享一个全开源的ASP.NET快速开发平台,能快速开发OA CRM ERP 等系统
bingo炸了 2017/3/30 16:28:14 阅读(870) 评论(0) 公司业务量比较大,接了很多项目,为了缩短开发周期老板让我牵头搭建了一个快速开发平台. 我们主要的业务是做OA.CRM. ...