首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

借助传统方法使用高级 GWT 控件(2)

借助传统方法使用高级 GWT 控件(2)

处理事件在 JavaScript 中定义的事件处理程序可与用 Java 代码实现的方法相关联。清单 4 展示了网格控件的 onRowClicked 事件是如何调用 onRowSelect Java 函数的:
清单 4. 从 JavaScript 调用 Java 函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void onRowSelect(String index){
  GWT.log("Row #" + index + "selected", null);
}

native JavaScriptObject init(JavaScriptObject myColumns, JavaScriptObject myData)/*-{
  var widget = this;
   
  try{
      ...
      // set click action handler
      $wnd.mygrid.onRowClicked = function(event, index){

widget.@com.mycompany.project.client.GwtGrid:nRowSelect(Ljava/lang/String;)(index);
      };

      ...
}
catch(e){
  $wnd.alert(e.description);
}
}-*/;




您必须使用如下表示法在 JavaScript 中引用 Java 方法: instance-expr.@class-name::method-name(param-signature)(arguments)
  • instance-expr 在调用实例方法时必须使用,在调用静态方法时必须去掉。
  • class-name 是类的完全限定名,方法在此类(或其子类)中声明。
  • param-signature 是这里指定的内部 Java 方法签名,但无此方法返回类型的尾随签名(因为不需要选择重载)。
  • arguments 是实际要传递给被调方法的参数列表。
使用 JavaScript 控件 API如  所示,实现 Java 类的 init 方法返回 JavaScriptObject,它代表一个网格实例。您可以将其作为一个类属性加以存储并随后在代码中引用,以调用 JavaScript 控件 API 方法。清单 5 展示了 Delete 按钮单击事件在 Java 代码中是如何处理的:
清单 5. JavaScript 方法调用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
protected JavaScriptObject grid = null;

...

public void onload(){
  if(grid == null){
    grid = init(...);
  }
}

public void onDeleteButtonClick(){
  delete(grid, getCurrentRow(grid));
}


public native void delete(JavaScriptObject obj, int index) /*-{

try{
    obj.deleteRow(index);
}
catch(e){
    $wnd.alert(e.description);
}

}-*/;   

public native int getCurrentRow(JavaScriptObject obj) /*-{
  
  try{
    return obj.getCurrentRow();
  }
  catch(e){
    $wnd.alert(e.description);
  }

  return -1;

}-*/;




在清单 5 中,Java 事件处理程序调用 JavaScript 控件 API 方法。这充分展示了与控件实例交互的能力。您可以为所有的 JavaScript 控件 API 定义类似的 Java 包装程序,并使其对 GWT 可用。
运行时配置演示的应用程序要求必须在系统上安装 GWT SDK。为了运行实例代码,只需将下载的带有源代码和编译脚本的归档文件解压缩到 GWT SDK 发布目录的示例文件夹。如果可以运行 GWT 示例,就可以利用如下命令(在 Windows 平台上)启动示例应用程序:
1
your_local_path\gwt-windows-1.3.3\samples\GridDemo\GridDemo-shell.cmd




示例 GWT 应用程序演示了集成的商业 JavaScript 网格组件,该组件由 ActiveWidgets 开发,可在该公司的站点下载评估版(参阅 )。图 1 给出了对应的结果:
图 1. 示例 GWT 应用程序中的高级网格控件示例应用程序归档文件包含了除 GWT 外的所有必需的库。我已经用所有的主流 GWT 发布版本测试过(包括 1.3 版本)。
结束语本文通过一个示例展示了如何将传统的 JavaScript 网格控件与 GWT 应用程序进行集成。您可以将同样的方法应用于市面上可用的其他高级控件。除了商业 JavaScript 控件外,您还可以参考 Yahoo! User Interface Library,内含大量开源 JavaScript 实用工具和控件,可用来借助 DOM 脚本、DHTML 和 Ajax(参阅 )构建高交互性的 Web 应用程序。
返回列表