`
duker
  • 浏览: 105610 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

gwt api 的层次结构

阅读更多

gwt api 的层次结构

这里所指的gwt api 主要是指有关界面/组件部分的api, 其它rpc,xml解析等不在讨论之列.

gwt 的整个api是分层构造的, 适当了解这些层次及其关系,有助于我们更好地掌握和使用这个伟大的工具.如图:


红线之下是javascript 的世界, 红线之上是gwt的世界, 我们可以看到gwt 一共分为四个层次, jsni/javascript overlay type , dom api , widget/组件 , 应用程序.下面逐一对各层进行说明.

 

jsni, javascript overlay type

 

jsni, javascript overlay type 是整个gwt体系中实现javascript 和java 交互的核心 .

  • 先说jsni, jsni 全称是 javascript native interface. 在java 的类中,将一个方法标注为native之后, 使用gwt 规定的语法,就可以用javascript 来实现这个方法,例如:
public static native void alert(String msg) /*-{
    $wnd.alert(msg);
  }-*/;

这是gwt  Window 类中的源码--一个标准的jsni 方法, 我们可以看到,方法实现就是一行简单的javascript 代码. (这里没有用 alert 或者 window.alert 的原因是: gwt 代码运行在一个iframe中,如果直接用alert或者window.alert,引用的是iframe文档,而不是host page 文档). 经过这个方法包装,以后在gwt程序中使用 " Window.alert"  实际上就是调用了javascript 的 alert 方法,当然你也可以不用这个封装, 直接实用 $wnd.alert .

 

  • 再说 javascript overlay type. ,这是官方对javascript overlay type 的介绍文档 ,简单来说呢,一个从JavaScriptObject 继承的类称为 javascript overlay type, 它的意义在于: 在java 中看来,这个对象就像一个真正的javascript 对象一样,它所有的属性,方法,在jsni method 中都可以用this 关键字访问到. 官方文档中举了一个json 的例子说明,实际上JavaScriptObject 对应的可以是任何javascript 中的对象,包括 document.getElementById 这样的dom 对象. 这样一来,大大简化了在gwt 中集成javascript 功能需要做的工作, gwt自己的dom api 整个就是在 javascript overlay type 和jsni 的基础上构建的. 看下面的gwt 源码:

 

public class Node extends JavaScriptObject

public final native <T extends Node> T appendChild(T newChild) /*-{
    return this.appendChild(newChild);
  }-*/;

 

 

public class Document extends Node

public static native Document get() /*-{
    return $doc;
  }-*/;

    第一段代码说明 Node 类 从 JavaScriptObject 继承, appendChild 方法内部的javascript 代码中使用了 "this"关键字,说明在运行时,这个Node 就是一个真实的dom对象. 第二段代码说明Document 从Node 继承, 所以也是一个"javascript overlay type" , 并且我们调用Document.get 获得一个Document 对象时,得到是 "$doc" 这个javascript 对象. (和上面的 $wnd 一样, $doc 指向的是 host page).

 

  以上所述是以浏览器内置的dom对象和gwt自己的dom 抽象层而言,实际上jsni 和javascript overlay type 可以和第三方的javascript 库工作. gwt flash bridge 这个项目在 flex ajax bridge 的基础上, 在gwt 中实现了类似gwt dom api一样的java 接口,通过这个接口,理论上可以实现在gwt完全通过java 来操纵flash 平台 api. 这样就可以灵活集成flash 平台的一些优秀特性到gwt的程序中. 下面是一个基于gwt flash bridge 实现的上传的demo截图.

实现的特性包括: 客户端文件检测和限制, 排队上传, 进度显示, 状态显示, action(取消/删除等). demo 地址在 这里

(注意如果打开了防火墙尤其是卡巴斯基,可能看不到上传的进度)

 

dom api

 

 dom api 实现了java 语言中的浏览器dom接口, 并且通过这个层次,可以封装不同浏览器的区别,gwt 中的组件使用 dom api 完成dom 的编程(某些地方也直接用jsni). 对于应用程序来说,需要的话,也可以使用dom api 直接处理dom 节点,而不仅仅局限于使用组件.

 

widget/组件

 

应用程序多数时候是使用widget 来构造用户界面, widget 自动管理相关的dom 节点的创建,parent-child 关系维护,以及提供了组件级别的事件系统.使得构造应用程序界面更为容易.

 

应用程序

 

gwt 的应用程序通过在 module 定义一个入口(entry-point)来实现(得到调用), onModuleLoad 方法类似于java 或者c中的 main(), 应用在这里完成所有必要的初始化工作. 值得一提的是,gwt 的应用不是必须要有用户界面的,一个应用可以用java 语言实现一些功能,然后在onModuleLoad中将这些功能安装到javascript 的命名空间中,然后在javascript 代码中就可以使用这些功能了.

应用程序中,可以根据需要,使用widget, 使用dom api, 或者直接使用jsni,java overlay type.

 

 

综上所述,gwt 是一个强大而又非常灵活的技术 , 可以根据需要灵活使用,既可以把整个page 当作一个应用,使用gwt来构造,也可以定义页面的某些区域使用gwt构造的界面,甚至可以仅仅是用gwt实现一些功能,然后export 给javascript 使用.

gwt 提供了jsni 和javascript overlay type,用于实现java 和javascript 的紧密集成,于是,任何在javascript 中 可以做的事情,在gwt 中都可以做 .

 

 

 

  • 大小: 97.3 KB
  • 大小: 79 KB
分享到:
评论
2 楼 923080512 2012-11-29  
1 楼 xiewanzhi 2011-07-08  
太棒了,如果在说一下gwt与flash的交互会更加完美

相关推荐

    SmartGWT2.0 API

    而`TreeGrid`则将树形结构与表格结合,方便用户以层次结构浏览信息。 其次,SmartGWT 提供了强大的数据绑定机制。通过`DataSource`,开发者可以将后台数据库或其他数据源与UI组件紧密关联,实现数据的实时更新和...

    GWT API ( v2.0)

    `overview-tree.html`展示了GWT API的类层次结构,方便开发者查找和理解类的关系。`deprecated-list.html`列出已弃用的API,提醒开发者避免使用。`constant-values.html`和`serialized-form.html`分别展示了常量值...

    GWT API ( v1.7.1)

    4. **overview-tree.html**:展示了GWT库中的类和包的层次结构,帮助开发者理解不同类之间的关系和组织方式。 5. **allclasses-frame.html** 和 **allclasses-noframe.html**:这两个文件都包含了所有类的列表,...

    SmartGWT 2.0 API.zip

    3. **overview-tree.html**:这个文件展示了SmartGWT 2.0 API的类层次结构,以树形结构呈现,方便开发者了解类之间的继承关系。 4. **allclasses-frame.html**:这个文件列出了所有可用的类,按字母顺序排列,便于...

    SmartGWTEE1.2 API

    - `overview-tree.html`: 类结构树,展示API的类和接口的层次关系。 - `allclasses-frame.html`和`allclasses-noframe.html`: 提供所有类的列表,便于查看和跳转。 - `constant-values.html`: 列出所有常量值,...

    smartgwt-1.3

    - 树形组件(TreeGrid):提供层次结构的数据展示,并可展开/折叠节点。 - 图形组件(Chart):支持各种图表类型,如柱状图、饼图、线图等,可进行动态数据更新。 - 表单组件(Form):包含多种输入控件,支持...

    非常好的gwt-ext培训教程

    2. **树形视图(Tree)**: 具备拖拽功能,方便组织和操作层次结构的数据。 3. **组合下拉框(Combobox)**: 可高度定制,提供丰富的选项和搜索功能。 4. **对话框(Dialog)**和**表单(Form)**: 提供易于使用的...

    GXT v2.2.1 API doc

    `overview-tree.html` 提供了一个类层次结构的视图,展示了GXT组件之间的继承关系。这有助于理解组件间的结构和关系。 4. **类和接口的全览** `allclasses-frame.html` 和 `allclasses-noframe.html` 分别以框架和...

    ahome-famo-us:Famo.us 的 Java(GWT) API

    3. **Context**: 上下文是渲染表面的区域,可以包含多个表面和其他上下文,形成层次结构。 4. **Modifiers**: 修改器是控制表面属性(如位置、大小、透明度等)的对象,它们允许开发者灵活地调整界面元素。 5. **...

    smartGwt 树(tree) 增删改

    Tree是一种可视化控件,可以显示层次结构的数据,通常用于展示目录结构、组织结构等。SmartGWT的Tree继承自ListGrid,但添加了折叠、展开和层级关系的功能。 1. **创建树结构**: 要创建一个基本的树,你需要定义...

    gxt-api-2.2.5 doc

    3. **overview-tree.html**:组件结构树,显示了GXT库中的包、类和接口的层次关系,帮助开发者了解组件的组织结构。 4. **allclasses-frame.html** 和 **allclasses-noframe.html**:列出所有类的详细信息,前者在...

    jpmml-model:用于PMML的Java类模型API

    增强的API: 类层次结构。 通用特性的标记接口。 值构造函数。 方法链接友好的setter方法。 可选的SAX定位器信息。 : 验证代理。 优化和转换代理。 支持平台: Java SE和EE。 安卓。 Google Web工具包(GWT)。 ...

    json-lib-2.4-jdk15.jar下载

    2. 支持对象图:可以将复杂的对象层次结构与JSON相互转换,支持List、Map、数组等类型。 3. 支持注解:支持@JSON、@JSONIgnore等注解配置对象的序列化和反序列化。 4. 支持流:除了支持对象/JSON与字符串的相互转换,也...

    MDC-GoogleWebToolkit:Google Web工具包的材料设计组件集合

    Material Design是Google推出的一种设计语言,它强调清晰的层次结构、响应式交互以及富有表现力的动画效果,旨在提供一致且直观的用户体验。Material Design Components(MDC)是Google维护的一组用于实现Material ...

    vakata-jstree-3.0.3-0-gcc08849-1

    JSTree 是一个开源的 JavaScript 库,它允许开发者在网页上以树形结构展示数据,广泛应用于网站导航、文件管理系统和组织层次结构显示等场景。这个版本号 "3.0.3-0-gcc08849-1" 暗示这是一个版本控制系统(可能是Git...

    dtree包及使用说明

    在IT领域,树形结构是一种常见的数据组织方式,它能够有效地表示层次关系,广泛应用于文件系统、数据库索引、计算机科学中的算法等。本篇主要介绍`dtree`包及其在Java和JavaScript环境下的使用方法。 `dtree`包是一...

    libgdx-nightly-20140711

    5. **gdx-backend-gwt.jar**:对于Web平台,libgdx提供了GWT(Google Web Toolkit)后端,使得游戏可以直接在浏览器中运行。 6. **gdx-setup.jar**:这是一个配置工具,帮助开发者设置项目结构和库依赖,简化了...

    myeclipse2015-version-comparison.pdf

    在可视化编辑器与建模方面,MyEclipse 2015提供WTP(Web Tools Platform)、UML1/UML2、JSF可视化设计器以及Struts1和Struts2可视化设计器等工具,这些工具能够帮助开发者更直观地理解项目结构,提高开发效率。...

Global site tag (gtag.js) - Google Analytics