利用Dojo和JSON建立无限级AJAX动态加载的功能模块树

1.28寸圆屏LCD驱动开发:GC9A01与RT-Thread嵌入式实现 圆形TFT-LCD是一种面向可穿戴、IoT终端的紧凑型人机交互显示技术,其核心在于SPI/QSPI接口时序控制与GRAM内存映射原理。通过驱动芯片(如GC9A01)完成电源管理、伽马校正MADCTL方向配置,可实现低功耗、高刷新率的图形渲染。该技术显著提升嵌入式设备的UI表现力与空间利用率,在智能手环、传感器节点、微型HMI等资源受限场景中具备突出工程价值。本文围绕1.28寸圆屏LCD模块,详解硬件接口规范、RT-Thread下QSPI驱动架构及Bresenham算法优化实践。 阅读详情
导读:
  时间: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', 'system.gif', 'N', '01');
   INSERT INTO GNMK VALUES ('d098a59f0b765e68010b765fda830001', '0102', '二级目录2', 'cxtjAction.do', 'system.gif', 'N', '01');
   INSERT INTO GNMK VALUES ('d098a59f0b765c30010b765d6b780002', '02', '一级目录2', null, 'system.gif', 'Y', ');
   INSERT INTO GNMK VALUES ('d098a59f0b765e68010b765fda830002', '0201', '二级目录1', 'cxtjAction.do', 'system.gif', 'N', '02');
   INSERT INTO GNMK VALUES ('d098a59f0b765e68010b765fda830002', '0202', '二级目录2', 'cxtjAction.do', 'system.gif', 'Y', '02');
   INSERT INTO GNMK VALUES ('d098a59f0b765e68010b765fda830002', '020201', '三级目录1', 'cxtjAction.do', 'system.gif', 'N', '0202');
   INSERT INTO GNMK VALUES ('d098a59f0b765e68010b765fda830002', '020202', '三级目录2', 'cxtjAction.do', 'system.gif', 'N', '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
3D IC中Memory-on-Logic堆叠测试的DFT解决方案与工程实践 在半导体行业,随着摩尔定律逼近物理极限,3D IC技术通过芯片垂直堆叠实现性能提升异构集成,已成为重要发展方向。其核心原理是利用硅通孔(TSV)或微凸块实现芯片间电气互连,将多个不同功能的芯片(如逻辑芯片与存储芯片)集成在一个封装内。这项技术的核心价值在于能大幅提升系统性能、降低功耗并实现更小的封装尺寸。然而,芯片堆叠后,传统的测试方法面临巨大挑战,尤其是测试访问存在物理屏障,无法直接探测被覆盖的芯片接口。为此,可测试性设计(DFT)成为确保3D IC可靠性与量产可行性的关键技术。它通过在设计阶段植入专用 阅读详情

相关推荐

Struts与Dojo实现动态结构Web应用

本文还有配套的精品资源,点击获取 简介:Struts框架与Dojo库结合用于开发动态结构Web应用,实现从数据库实时加载数据并以形视图展现。本文阐述如何通过Struts的MVC模式,Dojo动态组件,以及Ajax技术,构建一个用户友好的交互式Web界面,并涉及数据绑定、插件使用、配置实现、数据库交互、安全性优化用户交互等技术要点。 1. Struts框架...

weixin_26850469的博客 806

DOJO入门(1)-Hello,World!

 参考原文地址:http://dojo.jot.com/WikiHome/HelloWorld一、建立一个DOJO的环境然后建立以下的目录树,将dojo的内容全部复制到其中,就象这样:   OK,接下来,新建一个HTML页:      Dojo: Hello World!                二、添加

mint的专栏 3950

基于ESP32LD2410S毫米波雷达传感器的人体存在检测设备_自动配置检测门限_WiFi连接网络配置_MQTT消息推送_低功耗深度睡眠模式_LED状态指示_电池电压监测_硬件.zip

基于ESP32LD2410S毫米波雷达传感器的人体存在检测设备_自动配置检测门限_WiFi连接网络配置_MQTT消息推送_低功耗深度睡眠模式_LED状态指示_电池电压监测_硬件.zip

dojo级联步骤

dojo级联步骤 1、数据请求回来后,检查数据格式是否满足下拉框的数据格式; 2、通过firebug进行调试,检查select下拉框子项结点是否取道; 3、查看API文档,保证改变store的方法是正确的。...

牛栏山矿泉水 200

无限形节点动态加载 ajax,利用DojoJSON建立无限级AJAX动态加载功能模块...

利用DojoJSON建立无限级AJAX动态加载功能模块更新时间:2007年03月24日 00:00:00 作者:利用DojoJSON建立无限级AJAX动态加载功能模块看了“使用hibernate实现形结构无限级分类”这篇文章后,我也想将自己在所有开发的项目中使用的功能模块的实现方法以及完整DEMO(含源码)贴出来大家分享。其实在我的博客里是老早贴出来的,由于时间关系没好好整理...

weixin_33281940的博客 282

使用 Dojo 工具包 JSON-RPC 构建企业 SOA Ajax 客户端

 引言异步 JavaScript XML (Ajax) 是使用本机浏览器技术构建富 Web 应用程序的新方法。对于编写需要某些类型的“活动”用户界面的复杂应用程序的开发人员,JavaScript 在这方面已经做得很好。不过,JavaScript 难于编码、调试、移植维护。使用 Ajax 工具包有助于最大程度地减少使用 JavaScript Ajax 带来的许多常见问题。优秀的 A

chenzijun20082008的专栏 1915

dojo byid 子节点_使用JsonRestStore将子节点延迟加载Dojo

一棵 ,用于在父子关系中导航层次结构数据,可以帮助您轻松地理解一长串数据及其之间的关系。 Dojo提供了对创建的支持,Dojo中的遵循模型-视图-控制器(MVC)设计模式。 在数字中,角色由以下组件扮演: 控制器(dojox.data存储) 负责以非关系数据库形式存储所有数据的存储。 模型(dijit.tree ForestStoreModel / TreeStoreMo...

cuyi7076的博客 293

利用struts-dojo-plugin插件生成一颗

 在现有的资料中,关于DOJO的部分还是很难找的,有的是利用DOJOJSON来生成一颗,有的是利用struts2自己的一个封装功能生成,现在随着DOJO的广泛应用,已经变成了struts的一个小插件。现在我们就利用struts-dojo-plugin.jar相关的JS来生成一颗。这里所用到的数据库是Mysql。              首先,对于不了解struts2的同学来说

狂想者 2362

Struts 2处理Dojo Ajax请求的一点经验

从Struts 1到Struts 2,从Dojo 1.5到Dojo 1.7、1.8,技术一直在进步,经验却需要时时更新。对于Web应用中最常碰到的Ajax请求处理,新版本的Struts 2dojo 1.7做法就以前不一样(在JAVA servlet中返回不同类型的AJAX response)。现在就拿一个例子说明如何从前台用Dojo通过Ajax请求将Json数据送回后台,后台检测后返回信息;顺

沧海一粟 —— 技术随手记 3800

OpenCode 手动配置火山方舟 Agent Plan 教程

<think>我们只需要根据内容生成摘要。内容是关于火山方舟Agent Plan的配置指南。摘要需≤150字。概括要点:Agent Plan是什么,配置步骤,关键配置项,验证切换模型。注意简洁。</think>Agent Plan 是火山方舟的智能体套餐,一个 API Key 即可调用豆包、DeepSeek、Kimi 等多家模型。配置 OpenCode 时,在配置文件中添加 volcengine-agent-plan 提供商,设置 API Key、baseURL 模型列表,通过 opencode mod

qq_56236582的博客 207

从零到一: 创建一个 TypeScript 7 项目

本文介绍如何从零创建一个基于 TypeScript 7 的 Node.js 项目。项目使用 ECMAScript 模块 (ESM),并提供两条构建路径。TypeScript 编译器负责生成可发布文件,webpack 负责生成独立的 bundle。

除除的博客 178

MCP 从 0 到 1:给 Cursor / Claude 接一个自己的 Tool Server

分清 Host / Client / Server;本地用 stdio + JSON-RPC;stdout 留给协议,日志走 stderr。Node 20 及以上,type=module,安装官方 server 包、zod、tsx;先用 Inspector 验证列表与调用,再写宿主配置。配置用绝对路径;改完彻底重启宿主;第一台只读、只填一个真实缺口。同一套工厂以后可以切 HTTP,但不要在 stdio 未稳时同时处理鉴权与跨机器。

AIWritePaper-AI论文写作领先平台 414

如何使用 Python 抓取 Google 的“People Also Ask”

Google 的“People Also Ask”功能对搜索结果页面很有帮助。它会显示与用户初始搜索相关的问题。每个问题都可以展开并显示简短答案,帮助用户快速了解相关主题。这对 SEO 非常有价值,因为它有助于识别受众经常搜索的热门问题。

Data_Journal的博客 158

【AI】【运维】基于Docker&squid内网大模型访问网关/代理服务器部署操作手册

<think>我们根据要求,对用户提供的内容生成≤150字的文章摘要。内容是关于基于Dockersquid部署内网大模型访问网关/代理服务器的操作手册。摘要应简洁概括核心要点。注意字数限制。</think>本文档介绍使用Docker-Compose部署Squid代理,作为内网大模型访问网关,实现安全可控的公网通道。通过域名白名单ACL精确控制内网客户端对API及插件源的访问。方案支持容器化快速部署、配置持久化与热加载,并确保内网隔离安全。

hknaruto的专栏 212

Python 类型设计深度解析:TypedDict 能否替代 dataclass?从 JSON 数据边界到 API 设计的最佳实践

<think>我们只需要根据用户提供的文章内容生成摘要,字数≤150字。文章主要讲TypedDictdataclass的区别,适用场景,JSON边界,Optional与可选键的区别等。摘要需概括核心观点:TypedDict用于描述字典结构,dataclass用于业务对象;它们解决不同问题,不能替代;在JSON边界API设计中有各自最佳实践。要简洁。</think>TypedDict 与 dataclass 表面相似,实则解决不同问题:TypedDict 是字典类型声明,运行时仍为 dict,适合 JSO

铭渊老黄 177

kubectl 排障实战:jsonpath 精准取值、custom-columns、events 排序与 top 速查

线上 Pod 出问题,别一上来就然后一堆describe翻半天。kubectl 本身带了一套很强的查询排障能力,用好了定位问题能快好几倍。这篇不讲怎么装、怎么创建资源,只讲:精准取字段、自定义列、按时间看事件、看谁在吃资源。全是能直接抄进终端的。

weixin_42662753的博客 210

LLM API 上线演练与回滚清单:排查 401、429、超时 fallback 失效

面向 AI 客服、内容生成、数据分析、内部工具、批量自动化 SaaS 的 LLM API 上线演练,覆盖错误分类、超时预算、fallback、回滚证据。

qq_43958374的博客 211

基于langchain/deepagents/playwrights开发的几个工具型Agent示例

这些是不同Agent的实现,涉及代码审查、功能开发、研究报告、功能清单扫描。使用DeepAgentsLLM,工具包括文件操作、搜索、替换、web search、playwright等,并通过流式事件输出。摘要不超过150字。这些示例展示了基于大模型工具构建的多种智能体:代码审查Agent(只读分析)、功能开发Agent(可修改文件)、结合Bocha搜索的报告撰写Agent,以及集成Playwright的网站功能

weixin_61241731的博客 127
上一篇: 怎样查看Eclipse运行java程序时用的命令
下一篇: 数据库中的树形结构 - JAVA 设计 (通用)
chief1985
博客等级 码龄21年 1545粉丝 879原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值