`
yonglin4605
  • 浏览: 187617 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JSNI详解

    博客分类:
  • GWT
阅读更多
    在使用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数据类型
Zboolean
Bbyte
Cchar
Sshort
Iint
Jlong
Ffloat
Ddouble
L全路径类名
[typetype[]

全路径类名举例
类型签名JAVA数据类型
Ljava/lang/String;java.lang.String

目前在写JSNI时GWT已经会自动提示了,他会帮你自动补全方法签名,记不住也关系不大
1
0
分享到:
评论

相关推荐

    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详解.rar

    Ajax 由 HTML、JavaScript™ 技术、DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界面转化成交互性的 Ajax 应用程序。本系列的作者是一位 ...1.7 用 JSNI 调用本机 JavaScript 181 1.8 为什么使用 GWT? 183

    gwt开发问题

    ### GWT开发问题详解 #### 一、GWT Web实现右键菜单的多种方式 GWT(Google Web Toolkit)作为一款强大的Java到JavaScript编译工具,使得开发者能够使用熟悉的Java语言构建复杂的Web应用。然而,在实际开发过程中...

    GWT开发者手册_v2

    ### GWT开发者手册_v2 —— 关键知识点详解 #### 一、基本概念 **GWT编译器** - **核心功能**:Google Web Toolkit (GWT) 的核心功能在于其编译器,该编译器能将 Java 应用程序转化为 JavaScript 应用程序,使得...

    Google Web Toolkit 开发 Ajax

    ### Google Web Toolkit (GWT) 开发 Ajax 技术详解 #### 一、GWT特性简介 **GWT**(Google Web Toolkit)是Google推出的一款用于构建和优化复杂Web前端应用的开发工具包。它通过提供一系列强大的特性,极大地简化...

    GWT安装和使用

    ### GWT安装与使用详解 #### 一、GWT特性简介 **1. 动态、可重用的UI组件** GWT 提供了一系列丰富的 UI 组件库,这些组件不仅功能强大而且高度可定制,使得开发者能够轻松地构建美观且交互性强的用户界面。每个 UI...

    GWT技术介绍

    ### GWT技术详解 #### 一、GWT技术概述 **GWT**(Google Web Toolkit)是一种创新性的开发框架,它允许开发者使用Java语言来构建高度交互式的Ajax应用程序。通过GWT,开发者能够在开发阶段充分利用Java的强大功能...

    TQT-trunk:游戏 Cocos JS

    【Cocos JS 框架详解】 Cocos JS 是Cocos2d-x团队推出的一款用于开发2D游戏、互动媒体、动画应用的轻量级框架,它基于JavaScript语言,结合了Cocos2d-x的高性能和JavaScript的易用性。在“TQT-trunk”项目中,我们...

    liferay帮助文档

    【Liferay环境部署详解】 Liferay是一款开源的企业级门户平台,用于构建企业内部或外部的协作和信息共享网站。在部署Liferay时,确保环境的正确配置至关重要,以确保其功能正常运行。以下是对Liferay环境部署过程的...

Global site tag (gtag.js) - Google Analytics