`
zhoutiea
  • 浏览: 38494 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Extjs tree动态连接数据库加载Node

    博客分类:
  • java
阅读更多

  经过几天的努力,终于搞定了,动态连接数据库加载tree莱单中Node,这个也在网上查了不少资料,可惜啊,基本上都是转载一人之手。看上去很麻烦。咋一看就头晕,功夫不负有心人,我终于找到一个算是简单的方法,但是,还是不好用,还得靠自己啊,最后我把它们的代码综合参考一下,整理之后还算可以,虽然有点乱慢慢看。
数据库表设计
DROP TABLE treenode;
CREATE TABLE treenode (
tid  int  NOT NULL PRIMARY KEY,
parentid  int ,
text char(16) NOT NULL,
href  char(32)
);
INSERT INTO treenode (tid, parentid, text, href) VALUES(-100, -100,'01','hello.html');
INSERT INTO treenode (tid, parentid, text, href) VALUES(1, -100,'01','hello.html')
INSERT INTO treenode (tid, parentid, text, href) VALUES(2, -100,'02', 'hello.html')
INSERT INTO treenode (tid, parentid, text, href) VALUES(3, -100,'03', 'hello.html')
INSERT INTO treenode (tid, parentid, text, href) VALUES(4, 1,'04','hello.html')
INSERT INTO treenode (tid, parentid, text, href) VALUES(5, 1,'05','hello.html')
INSERT INTO treenode (tid, parentid, text, href) VALUES(6, 2,'02-01','hello.html')
INSERT INTO treenode (tid, parentid, text, href) VALUES(7, 2,'02-01', 'hello.html')
INSERT INTO treenode (tid, parentid, text, href) VALUES(8, 3,'03-01','hello.html')
INSERT INTO treenode (tid, parentid, text, href) VALUES(9, 3,'03-02','hello.html')
INSERT INTO treenode (tid, parentid, text,href) VALUES(10, 3,'03-03', 'hello.html')
Extjs代码:
Ext.onReady(function(){
   var Tree = Ext.tree;
   var treeloader=new Tree.TreeLoader({dataUrl:'servlet/TreeAction?TID=-100'});
      //定义树的跟节点
      var root=new Ext.tree.AsyncTreeNode({
            id:"-100",//根节点id
            draggable:false,
            expanded :true,
            text:"后台管理"
      });    
  
      //生成树形面板
      var tree=new Ext.tree.TreePanel({
        renderTo:'Tree',
        root:root,//定位到根节点       
        width:150,
        height:300,
        animate:true,//开启动画效果
        enableDD:false,//不允许子节点拖动
        autoScroll:true,
        loader:treeloader
  //    border:false,//没有边框
  //    rootVisible:false//设为false将隐藏根节点,
     });
    
     tree.setRootNode(root);  
      tree.on('beforeload',
     function(node){
     tree.loader.dataUrl='servlet/TreeAction?TID='+node.id; //定义子节点的Loader
  });   
     tree.render(); 
  root.expand();
 
});
java代码:

//从数据库中返回父节点id号
String sql="SELECT parentid FROM treenode WHERE parentid>0 Group By parentid Order By parentid";
  StringBuilder s= new StringBuilder();
  PreparedStatement pst = null;
  ResultSet rs = null;
  try{
   pst = conn.prepareStatement(sql); 
   rs = pst.executeQuery();
  
   while(rs.next())
   {
   s.append('|');
   s.append(rs.getInt("parentid"));
   }
   }catch(SQLException e){
    e.printStackTrace();
   }
   return s;
   }
//从数据库返回JSONArray字符串对象类
StringBuilder s=this.getResulsetRow(conn);
  ArrayList al=new ArrayList();
  StringBuilder node=new StringBuilder("[");
  String sql="SELECT * FROM treenode WHERE parentid="+pid+" ORDER BY tid";
  Statement pst = null;
  ResultSet rs = null;
  try{
   pst = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 
   rs = pst.executeQuery(sql);
   rs.last();
   int i=rs.getRow();
   System.out.println(i);
   rs.first();
   while(rs.next())
   {

   String p=String.valueOf(rs.getInt("tid"));
   node.append("{id:'"+p+"',text:'"+rs.getString("text").trim()+"',href:'"+rs.getString("href").trim()+"',");
//没有用set和get方法,好像不太好用,这里用了我自己的写法, 
//   TreeNode td=new TreeNode();
//   td.setTid(rs.getInt("tid"));
//   td.setText(rs.getString("text").trim());
//   td.setHref(rs.getString("href").trim());
   if(s.indexOf("|"+p+"|")!=-1){
    node.append("cls:'folder',leaf:"+false+"}");
//    td.setCls("folder");
//    td.setLeaf(false);
 
   }else{
   
    node.append("cls:'file',leaf:"+true+"}");
//    td.setCls("file");
//    td.setLeaf(true);
       }
   int row=rs.getRow();
   System.out.println(row);
   if(row<i){
    node.append(",");
   
   }
  
//     al.add(td);
         }
  
  } catch(SQLException e){
   e.printStackTrace();
  }
  node.append("]");
  return node;


5
3
分享到:
评论
5 楼 hzxlb910 2012-12-14  
我正在学习这个,能否发分源码给我,可以吗,谢谢,409235520@qq.com
4 楼 luanmad_java 2010-04-24  
cow, 不想共享就别发出来!
3 楼 useryouyou 2010-01-29  
直接写一个工具类也是一样的
2 楼 zhoutiea 2009-04-24  
awol2005ex 写道

json的部分可以用 net.sf.json包或者gson包来写 ,现在写起来太乱了,可以写成 &nbsp; JSONArray array=new JSONArray(); &nbsp; &nbsp; TreeNode td=new TreeNode(); &nbsp; td.setTid(rs.getInt("tid")); &nbsp;&nbsp; td.setText(rs.getString("text").trim()); &nbsp;&nbsp; td.setHref(rs.getString("href").trim()); &nbsp; td.setCls("folder"); &nbsp; td.setLeaf(false); &nbsp;&nbsp; JSONObject o=JSONObject.fromObject(td); &nbsp; array.put(o); &nbsp; 返回的时候&nbsp; response.getOutputStream().println(array.toString()); &nbsp;


谢谢,这个我再试一试,确实挺方便的,但是,我写的不好用,
1 楼 awol2005ex 2009-04-23  
json的部分可以用 net.sf.json包或者gson包来写 ,现在写起来太乱了,可以写成

  JSONArray array=new JSONArray();
 
  TreeNode td=new TreeNode();
  td.setTid(rs.getInt("tid"));
   td.setText(rs.getString("text").trim());
   td.setHref(rs.getString("href").trim());
  td.setCls("folder");
  td.setLeaf(false);

   JSONObject o=JSONObject.fromObject(td);


  array.put(o);


  返回的时候  response.getOutputStream().println(array.toString());
 


相关推荐

    extjs tree示例

    总的来说,ExtJS Tree 示例展示了如何将动态数据与用户界面相结合,提供一个直观且功能丰富的树状导航系统,同时通过Access数据库支持对树结构的增删操作。通过深入理解和实践,你可以创建出适应各种业务需求的高效...

    Extjs 加载数据库 生成tree

    通过java 访问数据库而生成节点 子节点的 ID 与 父节点的关系为“父节点id_子节点id”此id为数据库中的id 同理“父节点id_子节点id_子子节点id”,因此加载树时将node.id做为参数 通过split("_"),根据数据的长度就...

    extjs 写的动态加载、增删改查、拖拽Tree(完整版)

    总之,ExtJS 动态加载、增删改查和拖拽Tree的实现,结合MySQL数据库的操作,能够帮助你构建出功能强大且高效的前端数据管理界面。掌握这些技术,不仅可以提升开发效率,还能为用户提供流畅的操作体验。

    用ExtJS实现动态载入树

    ### 使用ExtJS实现动态加载树状结构 #### 数据库背景 为了实现在ExtJS中动态加载树状结构,首先需要创建一个能够存储组织结构信息的数据表。本文将使用Oracle数据库来构建一个简单的组织架构表。 - **表结构**: ...

    ExtJS_Tree利用_JSON_在Struts_2实现Ajax动态加载树结点

    在本文中,我们将深入探讨如何使用ExtJS框架的Tree组件,结合JSON数据格式以及Struts 2框架,来实现Ajax动态加载树形结构的节点。这是一项常见的需求,特别是在构建可扩展、用户友好的Web应用时,动态加载的树结构...

    extjs tree

    - ExtJS Tree支持拖放操作,可以将节点在树之间或内部进行移动,实现动态调整树结构。 6. **源码分析** - 通过阅读源码,可以深入理解TreePanel的工作原理,包括节点渲染、数据绑定、事件处理等方面的实现细节。 ...

    Extjs入门之动态加载树代码

    本文介绍了如何在Extjs中实现动态加载树的功能,包括数据库设计、前端页面布局以及JavaScript代码实现等几个方面。通过以上步骤,你可以轻松地为Web应用添加一个动态加载的树形导航菜单,提高用户的使用体验。当然,...

    ExtJS实现动态载入树

    【ExtJS动态加载树】是网页开发中一种常见的交互方式,它允许用户逐步加载树形结构的数据,提高页面的性能和用户体验。在ExtJS框架下,我们可以利用其强大的组件库来构建这样的功能。 首先,我们来看一下数据库背景...

    Ext.ux.tree.treegrid异步加载

    本文详细介绍了如何使用ExtJS中的`Ext.ux.tree.TreeGrid`组件实现异步加载功能,包括前端配置和后端数据处理两个方面。通过这种方式可以有效提升用户体验,同时减轻服务器的压力。在实际开发过程中,还需要根据具体...

    Extjs4动态树的实现

    ExtJS4是一个强大的JavaScript框架,用于构建富客户端应用程序。在这个示例中,我们将探讨如何实现一个动态树结构,其中数据是通过...这种动态加载的方式使得树结构可以根据用户交互灵活地展示数据,提高了用户体验。

    Extjs 无限树菜单 后台拼接json

    总结来说,"Extjs 无限树菜单 后台拼接json"涉及到的技术点包括:ExtJS的树形组件使用、后台动态生成JSON、无限滚动加载策略、以及前端和后端的异步通信。通过这样的方式,我们可以构建出动态、可扩展且高效的树形...

    extjs信息系统extjs信息系统

    1. **EXTJS组件使用**:理解EXTJS的各种组件,如Panel、Grid、Form、Tree等,以及如何根据需求组合和定制这些组件。 2. **数据绑定**:EXTJS支持双向数据绑定,通过Store与Model实现视图和数据的同步更新,简化了...

    利用TreeView控件动态生成无限级树

    还可以设置tree的展开策略,例如按需加载(async)。 5. **加载和渲染**:当页面加载完毕,TreePanel会自动发送请求到服务器获取数据,并根据返回的JSON数据动态构建TreeView。 在实际应用中,`利用TreeView控件...

    Ext动态树的生成,后台是JSP

    总结,结合ExtJS和JSP,我们可以创建一个动态的、异步加载的树形视图,通过JSP在服务器端生成数据,然后在客户端使用ExtJS进行渲染和交互。这种方案在展示大量层次化数据时,既提供了良好的用户体验,又兼顾了性能。

    ext grid 基本功能的学习 另付js 对上周月季度的计算等

    通常,Ext JS与数据库的交互是通过后端服务完成的,例如PHP、Java或Node.js,它们将数据库查询结果转换为JSON格式,再由Grid的Store进行解析和显示。 5. **日期计算**:在JavaScript中,处理日期和时间可以使用内置...

    在VS下利用Ext4.2的TreePanel的简单demo

    在Visual Studio(VS)开发环境中,使用ExtJS的TreePanel组件可以创建动态的、交互式的树形结构数据展示。本文将深入探讨如何基于Ext4.2版本实现一个简单的TreePanel demo,结合数据库进行后台的数据操作,包括增、...

    ext树形动态菜单 .doc

    `var menutree1 = new Ext.tree.TreePanel({` 这段代码用于创建一个基于 ExtJS 框架的树形菜单对象。`Ext.tree.TreePanel` 是一个功能强大的树形菜单控件,支持自动滚动、动画效果、拖放等功能,并可以通过配置参数...

    admin.zealot09:表达 extjs 节点

    2. **树形节点(TreeNodes)**:在ExtJS中,树形组件(TreePanel)用于展示层级结构的数据。每个节点(TreeNode)可以包含子节点,并且支持拖放、展开/折叠、选择等多种操作。开发者可以通过配置树节点的属性和事件...

Global site tag (gtag.js) - Google Analytics