在使用GWT后,我们将用JAVA来编码,可能我们之前已经写了一些javascript类库,现在转用GWT是不是意味着这些都无法使用,需要重新实现一遍呢
其实不需要,因为GWT给我们提供了嵌入javascript的技术,叫做JSNI(JavaScript Native Interface,JavaScript本地接口)。
JSNI可以实现以下功能
1.从JavaScript中直接执行Java方法
2.从JavaScript中调用Java代码,或从Java代码中调用JavaScript代码
3.在Java和Javascript之间抛异常
4。在JavaScript中读写Java域属性
JSNI的写法如下:
public native void method()/*-{
//此处写 javascript 代码
$wnd.alert('run in JSNI');
}-*/;
方法体以/*-{开头 以}-*/结尾,最后要加分号。
在这个方法体里面就可以写javascript代码了,上面的例子就会执行alert语句。
在alert前面我们加了$wnd,是因为我们的js代码会加载到一个iframe里面,直接使用alert会调用iframe里面的window对象,因此gwt给我们提供了$wnd用来指向主页面的window对象。
跟这个类似的还有document对象,在jsni中我们用$doc来指向主页面的document对象。
在JAVA代码中调用这个method()方法,就可以与javascript互动了
下面如何在javascript中调用JAVA的方法
package com.single.test.client;
import com.google.gwt.core.client.EntryPoint;
public class Test implements EntryPoint {
private String name="field";
public void onModuleLoad() {
invokeJavaMethod();
}
/**
* 静态JAVA方法
* @param s
*/
public static void staticLog(String s){
System.out.println("run in static method and input="+s);
}
/**
* 非静态JAVA方法
* @param s
*/
public void log(String s){
System.out.println("run in non-static method and input="+s);
}
/**
* javascript调用JAVA方法示例
*/
public native void invokeJavaMethod()/*-{
//调用JAVA静态方法
//规则: @全路径类名::静态方法名(方法签名)(传入参数)
@com.single.test.client.Test::staticLog(Ljava/lang/String;)('javascript string');
//调用JAVA非静态方法
//规则:实例对象.@全路径类名::方法名(方法签名)(传入参数)
this.@com.single.test.client.Test::log(Ljava/lang/String;)('javascript string');
//调用JAVA的非静态属性
//规则:实例对象.@全路径类名::属性名
var name=this.@com.single.test.client.Test::name;
$wnd.alert(name);
}-*/;
}
在调用过程中的方法签名比较难理解,他有以下对应关系
类型签名 | JAVA数据类型 |
Z | boolean |
B | byte |
C | char |
S | short |
I | int |
J | long |
F | float |
D | double |
L | 全路径类名 |
[type | type[] |
全路径类名举例
类型签名 | JAVA数据类型 |
Ljava/lang/String; | java.lang.String |
目前在写JSNI时GWT已经会自动提示了,他会帮你自动补全方法签名,记不住也关系不大
分享到:
相关推荐
4. JSNI 5. 在GWT中使用XML 6. GWT控件详解 7. 使用GWT控件 8. GWT-RPC 9. Ext GWT 10. (实战)俄罗斯方块游戏 11. (实战)费用申请审批流程 12. GWT与Flex整合 13. 图片缓存 CSS Sprite 14. 本地化 15. 其他高级功能
Ajax 由 HTML、JavaScript™ 技术、DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界面转化成交互性的 Ajax 应用程序。本系列的作者是一位 ...1.7 用 JSNI 调用本机 JavaScript 181 1.8 为什么使用 GWT? 183
### GWT开发问题详解 #### 一、GWT Web实现右键菜单的多种方式 GWT(Google Web Toolkit)作为一款强大的Java到JavaScript编译工具,使得开发者能够使用熟悉的Java语言构建复杂的Web应用。然而,在实际开发过程中...
### GWT开发者手册_v2 —— 关键知识点详解 #### 一、基本概念 **GWT编译器** - **核心功能**:Google Web Toolkit (GWT) 的核心功能在于其编译器,该编译器能将 Java 应用程序转化为 JavaScript 应用程序,使得...
### Google Web Toolkit (GWT) 开发 Ajax 技术详解 #### 一、GWT特性简介 **GWT**(Google Web Toolkit)是Google推出的一款用于构建和优化复杂Web前端应用的开发工具包。它通过提供一系列强大的特性,极大地简化...
### GWT安装与使用详解 #### 一、GWT特性简介 **1. 动态、可重用的UI组件** GWT 提供了一系列丰富的 UI 组件库,这些组件不仅功能强大而且高度可定制,使得开发者能够轻松地构建美观且交互性强的用户界面。每个 UI...
### GWT技术详解 #### 一、GWT技术概述 **GWT**(Google Web Toolkit)是一种创新性的开发框架,它允许开发者使用Java语言来构建高度交互式的Ajax应用程序。通过GWT,开发者能够在开发阶段充分利用Java的强大功能...
【Cocos JS 框架详解】 Cocos JS 是Cocos2d-x团队推出的一款用于开发2D游戏、互动媒体、动画应用的轻量级框架,它基于JavaScript语言,结合了Cocos2d-x的高性能和JavaScript的易用性。在“TQT-trunk”项目中,我们...
【Liferay环境部署详解】 Liferay是一款开源的企业级门户平台,用于构建企业内部或外部的协作和信息共享网站。在部署Liferay时,确保环境的正确配置至关重要,以确保其功能正常运行。以下是对Liferay环境部署过程的...