Dojo   发布时间:2019-10-11  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了利用Dojo和JSON建立无限级AJAX动态加载的功能模块树大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
导读:
  时间:2006-10-08 关键字: java,dojo,AJAX,JSON
  相关文章:
  在Struts2.0中使用JSON结合DWR和EXT
  原创中文分词代码分享(1.2)——词典接口
  更多相关推荐
  看了“使用hibernate实现树形结构无限级分类”这篇文章后,我也想将自己在所有开发的项
  
  目中使用的功能模块树的实现方法以及完整DEMO(含源码)贴出来和大家分享。其实在我的博客里是老早贴出来的,由于时间关系没好好整理。
  功能模块树是几乎在每个项目里都要用到的东西,利用Dojo的好处就是可以实现树的子节点的动态加载,这在树节点很多的情况下是很有用的
  下载附件二dojotree.rar,解压后将dist/dojotree.war部署到应用服务器即可浏览DEMO,DEMO中内置HSQLDB数据库,启动时自动加载。DEMO运行截图见附件一。 一、tree.jsp主要代码
  1、首先在head中导入Dojo库(dojo.js)和TreeWidget
  
  "text/javascript"?src="ajax/dojo/dojo.js"
  "text/javascript"
  dojo.require("dojo.widget.Tree");??
  dojo.require("dojo.widget.TreeNode");??
  dojo.require("dojo.widget.TreeSELEctor");??
  dojo.require("dojo.widget.TreeRPCController");??
  dojo.require("dojo.widget.TreeLoadingController");??
  dojo.require("dojo.widget.TreeContextMenu");??
  
  2、在body中放置TreeWidget,TreeLoadingController中的RPCUrl="treeServlet"为从后台获取数据的servlet名称,TreeNode中的expandLevel表示树初始张开级别
  
  
div>
  
div>
  

  

  3、建立TreeSELEctor事件处理函数
  
   function treeSELEctFired() {
  // get a reference to the treeSELEctor and get the SELEcted node
   var treeSELEctor = dojo.widget.manager.getWidgetById('treeSELEctor');
   var treeNode = treeSELEctor.SELEctedNode;
  // get a reference to the songDisplay div
   var hostDiv = document.getElementById("songDisplay");
   var isFolder = treeNode['isFolder'];
  //alert(isFolder);
   if ( !isFolder) {
   var song = treeNode['title'];
   var url = treeNode['url'];
  link(url);
  } else {
  }
  }
  4、将SELEct事件处理函数关联到treeSELEctor
  
   function init() {
  
  //get a reference to the treeSELEctor
   var treeSELEctor = dojo.widget.manager.getWidgetById('treeSELEctor');
  
  //connect the SELEct event to the function treeSELEctFired()
  dojo.event.connect(treeSELEctor,'SELEct','treeSELEctFired');
  }
  
  dojo.addOnLoad(init);
  二、主要java代码及数据结构
  1、Gnmk.java中tree的属性
  
   private String id;
  
   private String gnmkdm; //功能模块代码
  
   private String gnmksm; //功能模块说明
  
   private String gnmktb; //功能模块图标
  
   private String gnmklj; //功能模块路径
  
   private String gnmkmc; //功能模块名称
  
   private String gnmksj; //功能模块上级代码
  
   private String gnmkbz; //功能模块标志(‘N’为叶节点)
  2、HSQLDB内存数据库加载SQL(db.sql)
  
   CREATE TABLE GNMK (ID VARCHAR,GNMKDM VARCHAR,GNMKMC VARCHAR,GNMKLJ VARCHAR,GNMKTB VARCHAR,GNMKBZ VARCHAR,GNMKSJ VARCHAR);
   INSERT INTO GNMK VALUES ('d098a59f0b765c30010b765d6b780001','01','一级目录1',null,'system.gif','Y',');
   INSERT INTO GNMK VALUES ('d098a59f0b765e68010b765fda830001','0101','二级目录1','cxtjAction.do','N','01');
   INSERT INTO GNMK VALUES ('d098a59f0b765e68010b765fda830001','0102','二级目录2','01');
   INSERT INTO GNMK VALUES ('d098a59f0b765c30010b765d6b780002','02','一级目录2',');
   INSERT INTO GNMK VALUES ('d098a59f0b765e68010b765fda830002','0201','02');
   INSERT INTO GNMK VALUES ('d098a59f0b765e68010b765fda830002','0202','020201','三级目录1','0202');
   INSERT INTO GNMK VALUES ('d098a59f0b765e68010b765fda830002','020202','三级目录2','0202');
  3、TreeServlet .java主要代码,在getGnmkByParent(String gnmksj)方法中可以实现自己的业务,DEMO中使用GnmkDAO
  
   public class TreeServlet extends httpServlet {
  
   private static final long serialVersionUID = 1L;
  
   protected void doGet(httpServletrequest request,
  httpServletResponse responsE) throws ServletException,IOException {
  String action = request.getParameter("action");
  System.out.println("action b=>" + action);
  System.out.println("action b=>" + action);
  String data = request.getParameter("data");
   if (action.equalsIgnoreCase("getChildren")) {
  JSONTokener jsonTokener = new JSONTokener(data);
  JSONObject jsonObject = (JSONObject) jsonTokener.nextValue();
  JSONObject parentNodeObject = (JSONObject) jsonObject.get("node");
  
  response.setContentType("text/json; charset=gb2312");
  PrintWriter out = response.getWriter();
  out.write(getChildren(parentNodeObject));
  } else {
  }
  }
  
   private String getChildren(JSONObject parentNodeObject) {
  JSONArray result = new JSONArray();
  String parentObjectId = parentNodeObject.getString("objectId");// id 唯一
  // String parentWidgetId = parentNodeObject.getString("widgetId");// dm
  parentObjectId = parentObjectId.equalsIgnoreCase("root") ? ""
  : parentObjectId;
  System.out.println("parentObjectId=>" + parentObjectId);
  // 获取子功能模块
  List listGnmk = this.getGnmkByParent(parentObjectId);
  System.out.println("listGnmk=>" + listGnmk.size());
   if (listGnmk != null) {
  Iterator itGnmk = listGnmk.iterator();
   while (itGnmk.hasNext()) {
  Gnmk qxgnmk = (Gnmk) itGnmk.next();
   try {
  JSONObject jsonGnmkObject = new JSONObject();
  String gnmkbz = qxgnmk.getGnmkbz();
   Boolean isFolder = gnmkbz.equalsIgnoreCase("Y") ? true
  : false
  jsonGnmkObject.put("title",qxgnmk.getGnmkmc());
  jsonGnmkObject.put("isFolder",isFolder);
  jsonGnmkObject.put("widgetId",qxgnmk.getGnmkdm());
  jsonGnmkObject.put("objectId",qxgnmk.getGnmkdm());
  jsonGnmkObject.put("chilDiconSrc","images/"
  + qxgnmk.getGnmktb());
  jsonGnmkObject.put("url",qxgnmk.getGnmklj());
  result.put(jsonGnmkObject);
  } catch (JSONException E) {
  e.printStackTrace();
  }
  }
  }
   return result.toString();
  }
  
   private List getGnmkByParent(String gnmksj) {
  GnmkDAO gnmkDao = new GnmkDAO();
   return gnmkDao.getGnmkByParent(gnmksj);
  }
  }
  三、关于DEMO的其它配置说明
  1、实现javax.servlet.ServletContextListener接口的contexTinitialized方法来加载HSQLDB及其数据,ContextListener.java主要代码
  
   public void contexTinitialized(ServletContextEvent event) {
   try {
  // load the driver
  Class.forName("org.HSQLdb.jdbcDriver");
  // create the table and add sample data
  InputStreamReader in = new InputStreamReader(getClass().getClassLoader().getresourceAsStream("db.sql"));
  BufferedReader reader = new BufferedReader(in);
  DBUtils.setupdatabase(reader);
  } catch (ClassnotFoundException E) {
  e.printStackTrace();
  }
  
  }
  2、web.xml相关配置
  
  
  
  dojo.sample.ContextListener
  listener-class> >
  
  
  
  
  描述: DEMO截图
  大小: 8.5 KB
  dojotree.rar(2.7 MB)
  描述: DEMO源代码
  下载次数: 4353
  声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
  推荐链接
  IBM Rational软件开发简化到底

本文转自
http://www.javaeye.com/topic/26240

版权声明:本文为博主原创文章,未经博主允许不得转载。

猜你在找
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

大佬总结

以上是大佬教程为你收集整理的利用Dojo和JSON建立无限级AJAX动态加载的功能模块树全部内容,希望文章能够帮你解决利用Dojo和JSON建立无限级AJAX动态加载的功能模块树所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。