- 浏览: 179349 次
- 性别:
- 来自: 合肥
文章分类
最新评论
-
xmxujinjun:
大神,怎么调用啊
OpenLayers动画效果显示路线 -
采菊东篱下:
GWTCanvas-GWT封装javascript实现绘图 -
s33ker:
能简单说说怎么调用吗? 我也有点看蒙了
OpenLayers动画效果显示路线 -
yingkong87:
请教一下这个有没有调用的例子?对这块不是太熟。谢谢
OpenLayers动画效果显示路线 -
administrator1616:
哥,你的文章能说明白点么,汗
GWT的自动提示下拉框
GWT的JSNI提供了java代码和javascript代码之间的交互功能,其中最重要的一个类就是 JavaScriptObject 。这是一个非常特殊的类:
1.不可以直接new创建,必须通过JSNI的native方法来创建。这也是为什么它只有protected修饰符的构造函数的原因了。
2.java代码可以把JavaScriptObject的对象通过native再次传回给js使用。
3.从JavaScriptObject类继承的类其构造函数的修饰符必须是protected,其公共方法必须加上final修饰符。
先一个应用的小例子,希望对朋友们理解代码有所帮助。
现假设我们有一个外联的javascript文件中有这么一个类
function Person() { } Person.prototype.setName = function(name) { this.name = name; }
我们就可以在java中构建一个JSPerson类对javascript的Person类进行封装
public class JSPerson extends JavaScriptObjectWrapper { protected JSPerson() { } public static native JSPerson createNew() /*-{ return new $wnd.Person(); }-*/; }
然后使用这个类
JSPerson jsPerson = JSPerson.createNew(); jsPerson.invokeMethod("setName", "yingxia");
有了这样一个JSNI得通用类后,和外联js交互起来竟然如此的简单。
下面详细的解说,我们开始对JavaScriptObject类进行继承和封装,实现对外联的javascript库的方便操作。
1.首先我们建立类JavaScriptObjectWrapper继承自JavaScriptObject
package com.yingxia.tonglin.client.common; import com.google.gwt.core.client.JavaScriptObject; public class JavaScriptObjectWrapper extends JavaScriptObject { protected JavaScriptObjectWrapper() { } }
2.然后我们建立JSArrayHelper类,实现将java的Object数组转换为javascript的数组。这里请注意数组中每一个元素的类型的转换。
package com.yingxia.tonglin.client.common; public class JSArrayHelper { /** * * @param objs : must be primitive type or JavaScriptObject, now just support few you can extend * @return */ public static JavaScriptObjectWrapper toJSArray(Object... objs) { JavaScriptObjectWrapper jsArray = createJSArray(); for(int i = 0; i < objs.length; i++) { setJSArray(jsArray, i, objs[i]); } return jsArray; } private static native JavaScriptObjectWrapper createJSArray() /*-{ return []; }-*/; private static void setJSArray(JavaScriptObjectWrapper jsArray, int index, Object value) { if(value.getClass().equals(java.lang.Integer.class)) { setJSArray(jsArray, index, (int) Integer.valueOf(value.toString())); } if(value.getClass().equals(java.lang.Float.class)) { setJSArray(jsArray, index, (float) Float.valueOf(value.toString())); } if(value.getClass().equals(java.lang.Double.class)) { setJSArray(jsArray, index, (double) Double.valueOf(value.toString())); } if(value.getClass().equals(java.lang.Boolean.class)) { setJSArray(jsArray, index, (boolean) Boolean.valueOf(value.toString())); } if(value.getClass().equals(java.lang.String.class)) { setJSArray(jsArray, index, value.toString()); } if(value.getClass().equals(JavaScriptObjectWrapper.class)) { setJSArray(jsArray, index, (JavaScriptObjectWrapper) value); } } private static native void setJSArray(JavaScriptObjectWrapper jsArray, int index, int value) /*-{ jsArray[index] = value; }-*/; private static native void setJSArray(JavaScriptObjectWrapper jsArray, int index, float value) /*-{ jsArray[index] = value; }-*/; private static native void setJSArray(JavaScriptObjectWrapper jsArray, int index, double value) /*-{ jsArray[index] = value; }-*/; private static native void setJSArray(JavaScriptObjectWrapper jsArray, int index, boolean value) /*-{ jsArray[index] = value; }-*/; private static native void setJSArray(JavaScriptObjectWrapper jsArray, int index, String value) /*-{ jsArray[index] = value; }-*/; private static native void setJSArray(JavaScriptObjectWrapper jsArray, int index, JavaScriptObjectWrapper value) /*-{ jsArray[index] = value; }-*/; }
3.创建JavaScriptObjectWrapperImpl类,全是static native方法,实现类似于java反射的机制,可以调用方法,可以获取和设置属性。
package com.yingxia.tonglin.client.common; public class JavaScriptObjectWrapperImpl { public static native JavaScriptObjectWrapper invokeJSMethod(JavaScriptObjectWrapper jsObject, String methodName, JavaScriptObjectWrapper arguments) /*-{ return jsObject[methodName].apply(jsObject, arguments); }-*/; public static native void setProperty(JavaScriptObjectWrapper object, String name, int value) /*-{ object[name] = value; }-*/; public static native int getPropertyAsInt(JavaScriptObjectWrapper object, String name) /*-{ var ret = object[name]; return (ret === undefined) ? 0 : ret; }-*/; public static native void setProperty(JavaScriptObjectWrapper object, String name, String value) /*-{ object[name] = value; }-*/; public static native String getPropertyAsString(JavaScriptObjectWrapper object, String name) /*-{ var ret = object[name]; return (ret === undefined) ? null : ret; }-*/; public static native void setProperty(JavaScriptObjectWrapper object, String name, boolean value) /*-{ object[name] = value; }-*/; public static native boolean getPropertyAsBoolean(JavaScriptObjectWrapper object, String name) /*-{ var ret = object[name]; return (ret === undefined) ? 0 : ret; }-*/; public static native void setProperty(JavaScriptObjectWrapper object, String name, float value) /*-{ object[name] = value; }-*/; public static native float getPropertyAsFloat(JavaScriptObjectWrapper object, String name) /*-{ var ret = object[name]; return (ret === undefined) ? 0 : ret; }-*/; public static native void setProperty(JavaScriptObjectWrapper object, String name, double value) /*-{ object[name] = value; }-*/; public static native double getPropertyAsDouble(JavaScriptObjectWrapper object, String name) /*-{ var ret = object[name]; return (ret === undefined) ? 0 : ret; }-*/; public static native void setProperty(JavaScriptObjectWrapper object, String name, JavaScriptObjectWrapper value) /*-{ object[name] = value; }-*/; public static native JavaScriptObjectWrapper getProperty(JavaScriptObjectWrapper object, String name) /*-{ var ret = object[name]; return (ret === undefined) ? null : ret; }-*/; }
4.在其它两个类的支持下完善JavaScriptObjectWrapper类
package com.yingxia.tonglin.client.common; import com.google.gwt.core.client.JavaScriptObject; public class JavaScriptObjectWrapper extends JavaScriptObject { protected JavaScriptObjectWrapper() { } public final JavaScriptObjectWrapper invokeJSMethod(String methodName, Object... objs) { JavaScriptObjectWrapper arguments = JSArrayHelper.toJSArray(objs); return JavaScriptObjectWrapperImpl.invokeJSMethod(this, methodName, arguments); } public final void setProperty(String name, int value){ JavaScriptObjectWrapperImpl.setProperty(this, name, value); } public final int getPropertyAsInt(String name){ return JavaScriptObjectWrapperImpl.getPropertyAsInt(this, name); } public final void setProperty(String name, String value){ JavaScriptObjectWrapperImpl.setProperty(this, name, value); } public final String getPropertyAsString(String name){ return JavaScriptObjectWrapperImpl.getPropertyAsString(this, name); } public final void setProperty(String name, boolean value){ JavaScriptObjectWrapperImpl.setProperty(this, name, value); } public final boolean getPropertyAsBoolean(String name){ return JavaScriptObjectWrapperImpl.getPropertyAsBoolean(this, name); } public final void setProperty(String name, float value){ JavaScriptObjectWrapperImpl.setProperty(this, name, value); } public final float getPropertyAsFloat(String name){ return JavaScriptObjectWrapperImpl.getPropertyAsFloat(this, name); } public final void setProperty(String name, double value){ JavaScriptObjectWrapperImpl.setProperty(this, name, value); } public final double getPropertyAsDouble(String name){ return JavaScriptObjectWrapperImpl.getPropertyAsDouble(this, name); } public final void setProperty(String name, JavaScriptObjectWrapper value){ JavaScriptObjectWrapperImpl.setProperty(this, name, value); } public final JavaScriptObjectWrapper getProperty(String name){ return JavaScriptObjectWrapperImpl.getProperty(this, name); } }
这样我们的封装就完成了。
发表评论
-
为面版设置默认按钮
2009-11-10 16:33 1079在GWT中如何为面板设置默认的按钮呢,当用户按下enter的时 ... -
GWT琐记
2009-10-28 13:42 984客户端日期格式化: <inherits name ... -
创建可复用的Module
2009-10-22 11:28 1041在编写GWT程序的过程中,我们很多的功能模块都是可以复用的,这 ... -
在GWT中使用chart
2009-10-15 09:47 14371. 在你的module中加上 <inherits n ... -
GWT中日期的格式化
2009-10-14 15:03 2040首先要继承模块 <inherits name=& ... -
GWT的TreePanel示例:右键菜单删除
2009-09-29 19:22 3198基类DeptEmployeeTreePanel请参考我的上一篇 ... -
GWT的TreePanel示例:拖曳
2009-09-29 19:18 3158这是基础类 package com.yingxia.asse ... -
GWT中如何获取session
2009-09-02 15:19 2153请在RemoteServiceServlet中使用HttpSe ... -
GWT的自动提示下拉框
2009-08-31 22:47 2899如何用Gxt来做一个简单的自动完成下拉框呢?这里涉及到4个类: ... -
JSNI,JS调用Java方法
2009-08-31 08:16 2231请看这篇官方的介绍,里面有js将java的方法作为回调函数进行 ... -
GWT中的Drag和Drop
2009-08-24 19:02 1304在GWT中,拖放操作是基于这两个核心类DragSource和D ... -
GWT中RPC的异常处理
2009-08-22 09:24 1759在GWT中,由于Serialize的安全机制的限制,服务器端抛 ... -
GWT的RPC请求实现原理解析
2009-08-20 12:25 2404GWT的PRC请求的原理是什么,为什么我们在客户端能够直接调用 ... -
GWT的FlexTable的colspan和rowspan
2009-08-13 10:48 2761FlexTable简单强大,是GWT中布局的好帮手。这里我们简 ... -
5分钟建立一个gxt项目
2009-08-11 17:30 12841.下载最新的GWT开发工具包,解压缩到任意目录,为其配置好系 ... -
GWTCanvas-GWT封装javascript实现绘图
2009-08-10 23:25 3931GWT官方和其他一些开源的项目都有提供绘图的功能,只要添加相关 ... -
JSNI在GWT中调用JavaScript
2009-08-10 09:49 2976以下是一个示例: public native void t ... -
GWT自定义事件
2009-07-30 13:48 1867GWT的一些控件并不直接支持某些事件,如双击事件,那么如何让其 ... -
GWT本地简单的下拉框
2009-07-29 09:50 1870com.extjs.gxt.ui.client.widget. ... -
GWT的自定义正整数TextField
2009-07-29 08:46 1281这里关键是两个类PropertyEditor 和Valida ...
相关推荐
GWT,全称为Google Web Toolkit,是一个开源的Java框架,用于构建高性能、可维护的富互联网应用程序(RIA)。GWT允许开发者使用Java语言编写客户端代码,然后通过编译器将其转换为优化过的JavaScript,以便在各种...
GWT,全称为Google Web Toolkit,是Google推出的一款开源JavaScript开发框架,允许Java开发者使用Java语言来编写Web应用。GWT通过编译器将Java代码转换为高效的JavaScript,从而在客户端浏览器上运行。这个“GWT入门...
- **无用对象清理**:JAVASCRIPT不支持垃圾回收,GWT在WEB模式下无法实现JAVA对象清理。 - **严格浮点运算**:GWT不支持strictfp关键字,浮点运算可能不保证精确度。 **运行时库支持** GWT仅支持JAVA标准版和企业...
Gwt中文手册,GWt入门Gwt中文手册,GWt入门Gwt中文手册,GWt入门
RequestFactory是GWT提供的一种更加简洁的服务器通信方式,它提供了更面向对象的API,方便进行CRUD操作。 **4. Cell Widgets和CellTable** GWT的Cell Widgets和CellTable允许你创建高度可定制的列表或表格,它们以...
GWT开发基础知识点 在本资源中,我们将讨论Google Web Toolkit(GWT)的基础知识点,包括GWT的安装、配置、编码基础和客户端代码编写等方面的内容。 GWT安装和配置 在Eclipse中添加GWT插件是使用GWT开发的第一步...
fwefwefwGWT工具GWT工具GWT工具GWT工具GWT工具GWT工具
GWT是一种用于构建高性能、富客户端Web应用的开发工具,而Hibernate则是一个流行的Java对象关系映射(ORM)框架,它简化了Java应用对关系数据库的访问。 在GWT和Hibernate的集成中,开发者通常会将业务逻辑和数据...
标题 "gwt+spring+hibernate" 涉及的是一个使用Google Web Toolkit (GWT)、Spring框架和Hibernate ORM技术的集成示例。这是一个常见的Web应用开发组合,用于构建高效、可扩展且功能丰富的Java web应用程序。下面将...
SmartGWT是基于Google Web Toolkit (GWT) 的一个开源框架,它为开发富互联网应用程序(RIA)提供了丰富的组件库和高级功能。SmartGWT的最新版本进一步提升了用户体验,简化了开发过程,提供了更多现代Web设计的需求...
Gwt-Bean 一个使用 JavaScriptObject 的概念,如 Spring BeanWrapper
**GWT 概述** GWT(Google Web Toolkit)是由Google开发的一款开源的JavaScript开发框架,主要用于构建高性能、跨浏览器的Web应用程序。GWT通过Java语言进行开发,并将Java代码编译成高效的JavaScript,使得开发者...
4. **数据绑定**:GWT的Data Binding机制使你可以方便地将UI组件的状态与Java对象的属性关联起来,简化了数据管理。 5. **与后台互动**:GWT通过Remote Procedure Calls (RPC)机制实现了客户端与服务器端的通信。当...
gwt 入门,是你开始学习gwt的大道 安装之后的目录结构为: C:\程序开发\Java\gwt-windows-1.4.59 doc(文档目录,开发文档和Java API文档) samples(示例代码目录,非常有名的KitchenSink示例代码即在此目录中)...
GWT,全称为Google Web Toolkit,是一个开源的Java框架,用于构建高性能、跨浏览器的Web应用程序。这本书《GWT 揭秘》显然深入探讨了GWT的内部机制和使用技巧,通过源代码来帮助读者更好地理解和应用这个强大的工具...
标题 "Gwt连接数据库的案例" 涉及的核心知识点是使用Google Web Toolkit (GWT) 这一JavaScript开发框架来实现与后端数据库的交互。GWT是一种用于构建高性能、跨浏览器的富互联网应用程序(RIA)的工具,它允许开发者...
【GWT EXT 教程全集】是一份综合性的教程资源集合,主要涵盖了GWT(Google Web Toolkit)和EXT-GWT这两个技术领域的知识。GWT是Google推出的一个用于开发富互联网应用程序(RIA)的开放源代码框架,它允许开发者使用...
标题 "GWT操作数据库例子" 涉及到的主要知识点是使用Google Web Toolkit(GWT)来实现对数据库的操作,并将结果显示在Web页面上。GWT是一个开源的Java框架,它允许开发人员使用Java语言编写客户端的Web应用程序,...
5. **请求工厂(RequestFactory)**:GWT请求工厂提供了一种更简洁的与服务器交互的方式,相比RPC,请求工厂更适合处理复杂的对象和关联关系。 6. **Cell和CellWidget**:Cell库允许你构建高度可定制的列表和表格,...
GWT的主要优势在于它的强类型、面向对象的编程模型,以及对Java开发工具的全面支持,如Eclipse IDE。 EXT GWT(GXT)是EXT JS的GWT版本,它扩展了GWT的功能,提供了大量的UI组件,如表格、树形视图、图表等,这些...