- 浏览: 465133 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
zjxkeven:
放在自己工程上不报错,已放在服务器上就报错
java获得CPU使用率,系统内存,虚拟机内存等情况 -
wang1990cool:
能运行?我报错啊、
java获得CPU使用率,系统内存,虚拟机内存等情况 -
yue_ch:
yue_ch 写道getTotalPhysicalMemory ...
java获得CPU使用率,系统内存,虚拟机内存等情况 -
yue_ch:
getTotalPhysicalMemorySize()get ...
java获得CPU使用率,系统内存,虚拟机内存等情况 -
kjmmlzq19851226:
private RealSubject realSubject ...
代理模式,静态代理与动态代理
GWT Object Exporter<o:p></o:p>
<o:p> </o:p>
1. 简介<o:p> </o:p>
GWT 允许传递的对象为Element,JavaScriptObject<o:p> </o:p>
GWT Object Exporter 提供将页面对象 导出(export) 成JavaScriptObject,将JavaScriptObject 导入(import)成代理对象(服务)
<o:p> </o:p>
2. 核心 & Demo<o:p></o:p>
interface IExportable : 实现此接口的类将允许exporter 成 javaScriptObject
interface IExportableExporter : exporter 接口,根据需要写出export、import方法
<o:p> </o:p>
2.1 需要导出的类实现IExportable (或接口继承IExportable)<o:p></o:p>2.2 定义Exporter , 提供 导出/导入 IFace1接口方法<o:p></o:p>
java 代码
- interface IFace1 extends IExportable{
- void method1(String s1);
- }
- class Face1 implements IFace1 {
- public void method1(String s1) {
- System.out.println("s1 = " + s1);
- }
- }
<o:p></o:p>
<o:p>
java 代码
- interface Exporter extends IExportableExporter {
- public JavaScriptObject doExport(IFace1 iface1);
- public IFace1 doImportIFace1(JavaScriptObject jso);
- }
2.3 应用
<o:p>java 代码</o:p><o:p> </o:p>
- public void onModuleLoad() {
- Face1 face1 = new Face1();
- Exporter exporter = (Exporter) GWT.create(Exporter.class);
- JavaScriptObject jso = exporter.doExport(face1);
- //其他模块中:先通过$wnd或其他方式获得此jso,后可导入
- IFace1 iface1 = exporter.doImportIFace1(jso);
- iface1.method1();
- }
</o:p>
评论
24 楼
kelvinlaw
2007-11-29
謝謝樓主的耐心指點, 已經能成功互相share 了, 雖然必須在GWTSession 定義所有可能要放入map 的class 的put /get method, 有點不便, 但至少滿足了GWTSession 應有的功能
嘗試了一下, put 不用另行寫putA, 用原本的put(String key, Object value) 已經可以, 但必須用public Authentication getA(String key)取出
gwt-object-exporter 的出現比網絡上以serialize/deserialize 的方法去share object between widget , 無論在易用性, 效率, 和即時同步性都實在好太多!
仍然期待樓主的應用示範.
嘗試了一下, put 不用另行寫putA, 用原本的put(String key, Object value) 已經可以, 但必須用public Authentication getA(String key)取出
gwt-object-exporter 的出現比網絡上以serialize/deserialize 的方法去share object between widget , 無論在易用性, 效率, 和即時同步性都實在好太多!
仍然期待樓主的應用示範.
23 楼
yongyuan.jiang
2007-11-29
session.putA(new Authentication ());
session.getA("key");
session.getA("key");
22 楼
yongyuan.jiang
2007-11-29
ok了。
public class GWTSession implements IExportable {
HashMap map = new HashMap();
public Object putA(String key,Authentication value){
return map.put(key, value);
}
public Authentication getA(Object key) {
return (Authentication) map.get(key);
}
}
需要显示写出该类,exporter才会自动将他export和import.
public class GWTSession implements IExportable {
HashMap map = new HashMap();
public Object putA(String key,Authentication value){
return map.put(key, value);
}
public Authentication getA(Object key) {
return (Authentication) map.get(key);
}
}
需要显示写出该类,exporter才会自动将他export和import.
21 楼
kelvinlaw
2007-11-29
按照樓主的意思寫成
存入:
取出:
這次也是ClassCastException, 但變成 JavaScriptObject
Orz...
存入:
gwtSession.put("objectTest", AuthenticationHelper.helper.doExport(auth));
取出:
Window.alert("objectTest getCredential -> " + ((Authentication) AuthenticationHelper.helper.doImport((JavaScriptObject) GWTSessionAccessor.get().get("objectTest"))).getCredential());
這次也是ClassCastException, 但變成 JavaScriptObject
[ERROR] Unable to load module entry point class myFrameTest.inner.client.Inner (see associated exception for details) java.lang.ClassCastException: com.google.gwt.core.client.JavaScriptObject cannot be cast to com.google.gwt.core.client.JavaScriptObject at myFrameTest.inner.client.Inner.onModuleLoad(Inner.java:27) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:342) at com.google.gwt.dev.shell.BrowserWidget.attachModuleSpace(BrowserWidget.java:326) at com.google.gwt.dev.shell.ie.BrowserWidgetIE6.access$200(BrowserWidgetIE6.java:36) at com.google.gwt.dev.shell.ie.BrowserWidgetIE6$External.gwtOnLoad(BrowserWidgetIE6.java:70) at com.google.gwt.dev.shell.ie.BrowserWidgetIE6$External.invoke(BrowserWidgetIE6.java:125) at com.google.gwt.dev.shell.ie.IDispatchImpl.Invoke(IDispatchImpl.java:293)
Orz...
20 楼
yongyuan.jiang
2007-11-29
奇怪,我之前测试的class A implements IExportable不需要做这个操作。
怎么你那个还是出错?
发你的测试给我看看吧:
yongyuan.jiang@gmail.com
怎么你那个还是出错?
发你的测试给我看看吧:
yongyuan.jiang@gmail.com
19 楼
yongyuan.jiang
2007-11-29
呵呵,这个还是很基础的,等我把另外一个实际应用上传,包括对象间传输,事件的监听。
你先用这个了解了解也可以。呵呵
你先用这个了解了解也可以。呵呵
18 楼
yongyuan.jiang
2007-11-29
oh!
sorry.
我知道问题所在了。
你需要这样:
setSession("auth",exporter.doExport(new Authentication()));
in inner:
Authentication auth = exporter.doImport(getSession("auth"))
只能传递JavaScriptObject!
sorry.
我知道问题所在了。
你需要这样:
setSession("auth",exporter.doExport(new Authentication()));
in inner:
Authentication auth = exporter.doImport(getSession("auth"))
只能传递JavaScriptObject!
17 楼
kelvinlaw
2007-11-29
附上測試代碼, 請指教一下
內有2個widget, Outer 和Inner, Outer 內是一個frame, frame 內的Inner 的html, 測試的目的是想Outer 和Inner間可以通過GWTSession 而共用object.
但結果是, String 可以Share, 但自定的Object 就不行, 在get 出來會有 ClassCastException
內有2個widget, Outer 和Inner, Outer 內是一個frame, frame 內的Inner 的html, 測試的目的是想Outer 和Inner間可以通過GWTSession 而共用object.
但結果是, String 可以Share, 但自定的Object 就不行, 在get 出來會有 ClassCastException
[ERROR] Unable to load module entry point class myFrameTest.inner.client.Inner (see associated exception for details) java.lang.ClassCastException: myFrameTest.commons.client.Authentication cannot be cast to myFrameTest.commons.client.Authentication at myFrameTest.inner.client.Inner.onModuleLoad(Inner.java:22) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:342) at com.google.gwt.dev.shell.BrowserWidget.attachModuleSpace(BrowserWidget.java:326) at com.google.gwt.dev.shell.ie.BrowserWidgetIE6.access$200(BrowserWidgetIE6.java:36) at com.google.gwt.dev.shell.ie.BrowserWidgetIE6$External.gwtOnLoad(BrowserWidgetIE6.java:70) at com.google.gwt.dev.shell.ie.BrowserWidgetIE6$External.invoke(BrowserWidgetIE6.java:125) at com.google.gwt.dev.shell.ie.IDispatchImpl.Invoke(IDispatchImpl.java:293)
16 楼
kelvinlaw
2007-11-28
yongyuan.jiang 写道
commons.gwt.security.client.Authentication 也要继承IExportable
也是传递的对象嘛
也是传递的对象嘛
唔, commons.gwt.security.client.Authentication 已經implements IExportable 了, 還是不行...
強調一下, ClassCastException 是當一個模块企圖去取出其他模块put 入GWTSession 的value 才會出現, 如果是自個模块put/get 是不會有問題的, 納悶...
15 楼
yongyuan.jiang
2007-11-28
commons.gwt.security.client.Authentication 也要继承IExportable
也是传递的对象嘛
也是传递的对象嘛
14 楼
kelvinlaw
2007-11-28
yongyuan.jiang 写道
对了,我上传了新的
http://code.google.com/p/gwt-object-exporter/downloads/list
支持export内部类。
btw.
其实所以对象都能传递的,只是传递过去那个对象是否可以使用。
实现IExportable,就能将它拿来使用。
虽然能export对象出去,但是不建议复杂数据。如User能够export出去别的模块,但,假设user.getAddress是个list,list里面是个对象,暂时也没处理这个。
http://code.google.com/p/gwt-object-exporter/downloads/list
支持export内部类。
btw.
其实所以对象都能传递的,只是传递过去那个对象是否可以使用。
实现IExportable,就能将它拿来使用。
虽然能export对象出去,但是不建议复杂数据。如User能够export出去别的模块,但,假设user.getAddress是个list,list里面是个对象,暂时也没处理这个。
樓主的反應速度和熱心真今人感動...
剛下了最新的code
用了樓主提議的GWTSession 代碼
發現一個奇怪的問題, 我在第一個模块中, 创建GWTSession 並放入2 對 key/value, 分別是 "stringTest"/"String" 和 "objectTest"/Authentication, 在第二個模块中, 可以得知 map 的size = 2, 也可以順利取出 key為"stringTest" 的value, 但當嘗試取出"objectTest" 的value 時, GWT HostedMode 彈出異常
java.lang.ClassCastException: commons.gwt.security.client.Authentication cannot be cast to commons.gwt.security.client.Authentication
奇怪的是, 如果"stringTest"/"String" 和 "objectTest"/Authentication 2對 key/value 同樣是在第二個模块中寫入和讀出的話, 就可以順利讀取
請教一下
13 楼
yongyuan.jiang
2007-11-28
对了,我上传了新的
http://code.google.com/p/gwt-object-exporter/downloads/list
支持export内部类。
btw.
其实所以对象都能传递的,只是传递过去那个对象是否可以使用。
实现IExportable,就能将它拿来使用。
虽然能export对象出去,但是不建议复杂数据。如User能够export出去别的模块,但,假设user.getAddress是个list,list里面是个对象,暂时也没处理这个。
http://code.google.com/p/gwt-object-exporter/downloads/list
支持export内部类。
btw.
其实所以对象都能传递的,只是传递过去那个对象是否可以使用。
实现IExportable,就能将它拿来使用。
虽然能export对象出去,但是不建议复杂数据。如User能够export出去别的模块,但,假设user.getAddress是个list,list里面是个对象,暂时也没处理这个。
12 楼
yongyuan.jiang
2007-11-28
haha,原来是这样,按照你的方式,我试了一下,果然也不行,调试后,发现原因了,拿不到的原因是暂时不支持继承。
起初设计是考虑模块间接口调用,所以GWTSession继承HashMap没有做这方面处理。
不过,你可以这样实现:
之前不ok的原因是传递后的GWTSession实际上创建了新的HashMap.
ok,简单对象也是可以传递的,如下:
测试通过,A也要实现IExpotable.
起初设计是考虑模块间接口调用,所以GWTSession继承HashMap没有做这方面处理。
不过,你可以这样实现:
public class GWTSession implements IExportable{ HashMap map = new HashMap(); public Object get(Object key) { return map.get(key); } public Object put(Object key, Object value) { return map.put(key, value); } public int size() { return map.size(); } }
之前不ok的原因是传递后的GWTSession实际上创建了新的HashMap.
ok,简单对象也是可以传递的,如下:
public class TestExportable implements EntryPoint{ public void onModuleLoad() { exporter e = (exporter) GWT.create(exporter.class); GWTSession session = new GWTSession(); session.put("auth", new A("auth")); session.put("2", new String("adf")); JavaScriptObject jso = e.export(session); GWTSession session2 = e.impor(jso); System.out.println(((A)session2.get("auth")).getN()); } class A implements IExportable{ String n; public A(String n2) { n = n2;// TODO Auto-generated constructor stub } public String getN(){ return n; } } interface exporter extends IExporter{ JavaScriptObject export(GWTSession session); GWTSession impor(JavaScriptObject jso); } }
测试通过,A也要实现IExpotable.
11 楼
kelvinlaw
2007-11-28
yongyuan.jiang 写道
是这样的,你在两个模块(两module,即有两个EntryPoint)都导入了GWTSession模块是吧。
如果都导入了GWTSession模块,那么在各自模块内都会创建两个GWTSession,所以里面的东西是空的。
所以只能导入一个GWTSession模块,独立于其他模块。
基于gwt object exporter,我们有个Hostpage模块,用于管理gwt object,以及页面组件,模块间事件处理,等有空了将一起发布出去。
如果都导入了GWTSession模块,那么在各自模块内都会创建两个GWTSession,所以里面的东西是空的。
所以只能导入一个GWTSession模块,独立于其他模块。
基于gwt object exporter,我们有个Hostpage模块,用于管理gwt object,以及页面组件,模块间事件处理,等有空了将一起发布出去。
先謝過你的回覆!
我的應用裡, 只有一個模块會创建GWTSession, 然後把GWTSession export 成jso 放在 html 中的javascript variable 中
private static native void setGWTSession(JavaScriptObject gwtSession) /*-{ $wnd.parent.gwtSession = gwtSession; }-*/;
另一個模块可以順利從html 的javascript 裡拿回GWTSession 的jso
public static native JavaScriptObject getGwtSession() /*-{ if ($wnd.parent.gwtSession == undefined) { return null; } else { return $wnd.parent.gwtSession } }-*/;
並import 成GWTSession
GWTSession gwtSession = helper.doImport(jso);
問題在於,在第一個模块put 入GWTSession 的key/value pair, 在第二個模块中拿不出黎, 全部是null
故嘗試把GWTSession 改成:
package commons.gwt.data.client; import java.util.HashMap; import com.macaufly.gwt.exporter.client.IExportable; public class GWTSession extends HashMap implements IExportable { private Object object public Object getObject() { return object; } public void setObject(Object object) { this.object = object; } }
第一個模块 setObject(new String("test")), 在第二個模块可以拿到"test", 是否exporter 對object 有一定要限制? 如必須為pojo, 因為我試過一個只有private constructor 的class 不能import/export.
10 楼
yongyuan.jiang
2007-11-28
是这样的,你在两个模块(两module,即有两个EntryPoint)都导入了GWTSession模块是吧。
如果都导入了GWTSession模块,那么在各自模块内都会创建两个GWTSession,所以里面的东西是空的。
所以只能导入一个GWTSession模块,独立于其他模块。
基于gwt object exporter,我们有个Hostpage模块,用于管理gwt object,以及页面组件,模块间事件处理,等有空了将一起发布出去。
如果都导入了GWTSession模块,那么在各自模块内都会创建两个GWTSession,所以里面的东西是空的。
所以只能导入一个GWTSession模块,独立于其他模块。
基于gwt object exporter,我们有个Hostpage模块,用于管理gwt object,以及页面组件,模块间事件处理,等有空了将一起发布出去。
9 楼
kelvinlaw
2007-11-28
我想寫一個GWTSession, 作用就如HTTPSession 一樣, 可以被同一個html 內的gwt widget 互相share object:
GWTSession:
當然需要Helper 去import/export:
為了GWT Widget 可以方便拿到GWTSession來用, 寫了一個GWTSessionAccessor
實際應用:
發現 gwtSession 可以拿出來, 但內部的key/value pair 的數目是0...我用錯了嗎?....謝謝
GWTSession:
package commons.gwt.data.client; import java.util.HashMap; import com.macaufly.gwt.exporter.client.IExportable; public class GWTSession extends HashMap implements IExportable { }
當然需要Helper 去import/export:
package commons.gwt.data.client; import com.google.gwt.core.client.JavaScriptObject; import com.macaufly.gwt.exporter.client.IExporter; public interface GWTSessionHelper extends IExporter { public JavaScriptObject doExport(GWTSession gwtSession); public GWTSession doImport(JavaScriptObject jso); }
為了GWT Widget 可以方便拿到GWTSession來用, 寫了一個GWTSessionAccessor
package commons.gwt.data.client; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.JavaScriptObject; public class GWTSessionAccessor { private static GWTSessionHelper helper = (GWTSessionHelper) GWT .create(GWTSessionHelper.class); public static void clear() { setGWTSession(null); } private static native void setGWTSession(JavaScriptObject gwtSession) /*-{ $wnd.parent.gwtSession = gwtSession; }-*/; public static native JavaScriptObject getGwtSession() /*-{ if ($wnd.parent.gwtSession == undefined) { return null; } else { return $wnd.parent.gwtSession } }-*/; public static GWTSession get() { JavaScriptObject jso = getGwtSession(); if (jso == null) { GWTSession gwtSession = new GWTSession(); setGWTSession(helper.doExport(gwtSession)); return gwtSession; } else { GWTSession gwtSession = helper.doImport(jso); return gwtSession; } } }
實際應用:
// put the auth into session GWTSession gwtSession = GWTSessionAccessor.get(); gwtSession.put("auth", AuthenticationAccessor.get()); // test the auth has been put into session gwtSession = GWTSessionAccessor.get(); Authentication auth = gwtSession.get("auth");
發現 gwtSession 可以拿出來, 但內部的key/value pair 的數目是0...我用錯了嗎?....謝謝
8 楼
yongyuan.jiang
2007-11-23
可以做到。
原理:
html里面内2个widget可以传递JavaScriptObject.
gwt object expoter就是提供将share的object解析成JavaScriptObject,和导入成类的。
原理:
html里面内2个widget可以传递JavaScriptObject.
gwt object expoter就是提供将share的object解析成JavaScriptObject,和导入成类的。
7 楼
kelvinlaw
2007-11-22
請問這個exporter的作用是什麼?
我想一個html 內有2個gwt 的widget, 2個widget 相互share 一個gwt 的object
可以做到嗎?
請指教
我想一個html 內有2個gwt 的widget, 2個widget 相互share 一個gwt 的object
可以做到嗎?
請指教
6 楼
yongyuan.jiang
2007-11-07
o~,粗心大意了,你把错误的方法屏蔽就Ok拉,Download已经更新了~
5 楼
jayshow
2007-11-07
还是少了点类呀~~?
发表评论
-
css split tool
2010-05-06 22:50 0css split tool 从gwt中抽取,希望可以在we ... -
GWT网站上线!hotye.com!
2009-03-31 20:26 4963GWT hotye.com 好易自助终 ... -
google web toolkit Serializable
2009-03-25 00:39 959google web toolkit Serializable ... -
gwt :鼠标离开PopupPanel时触发事件
2008-09-05 00:08 1878此功能是丁鹤泽开发的: /** ... -
GWT Hosted模式运行原理
2008-06-14 17:32 3024hosted模式运行原理,对源 ... -
HTMLTemplatePanel使用
2008-05-28 01:20 1613新增功能 1.直接获得html页面元素,无需实例化对象,如:I ... -
GWT服务端抛出前端异常
2008-03-20 17:38 1561在后台抛出异常,并在前端能够捕获 方法很简单:要抛出的App ... -
Gwt 服务端使用hiberante 问题解决
2008-03-20 17:36 1799Gwt 服务端使用hiberante 问题解决 使用hib ... -
GWT & apache-commons-fileUpload 轻松实现文件上传
2008-01-18 11:44 2302gwt使用apache-commons-fileUpload, ... -
GWT Remote Service
2007-12-27 17:38 1949GWT Remote Service 远程调用服务 1.简介 ... -
GWT 模块间:组件管理 & 事件处理
2007-12-13 18:53 2316原始的gwt开发模式在大型项目或复杂页面中并不适用,这促使了 ... -
GWT HTML Template :模板布局&组件自动装配
2007-12-03 19:58 5581GWT HTML Template 1.简介 gwt进行ht ... -
gwt spring 完美整合
2007-11-25 19:05 66711.3版本前整合gwt spring,用到了第三方类,如cg ...
相关推荐
gwt 练习gwt 练习gwt 练习gwt 练习
EXT-GWT2.0.1+API+DOC gwtdesigner Gwt-Ext基础-中级-进阶 GWT快速开发 GWT入门 GWT中文教程
fwefwefwGWT工具GWT工具GWT工具GWT工具GWT工具GWT工具
3. 模块 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. 其他...
gwt 入门,是你开始学习gwt的大道 安装之后的目录结构为: C:\程序开发\Java\gwt-windows-1.4.59 doc(文档目录,开发文档和Java API文档) samples(示例代码目录,非常有名的KitchenSink示例代码即在此目录中)...
Gwt中文手册,GWt入门Gwt中文手册,GWt入门Gwt中文手册,GWt入门
本书内容全面,不仅详细介绍了 GWT 的主要模块和控件、GWT 与 JavaScript 对象的交互、在 GWT 中使用 XML、开发自定义 GWT 控件、GWT-RPC 和 Ext GWT 等必备的基础知识,而且还深入讲解了 GWT 与 Flex整合、图片缓存...
GWT(Google Web Toolkit) 是 Google 最近推出的一个开发 Ajax 应用的框架,它支持用 Java 开发和调试 Ajax 应用,本文主要介绍如何利用 GWT 进行 Ajax 的开发。 Ajax技术是当前开发web应用的非常热门的技术,也是Web...
博文链接:https://silentlakeside.iteye.com/blog/177882
很好的资源,在这边分享下,提供给想要寻找GWT资源的兄弟姐妹们 如果哪位兄弟有好的资源不要忘了分享啊
用Maven创建GWT_SmartGWT项目,从而可利用Maven进行管理,以及持续集成。
GWT的eclipse4.4离线开发插件,国内现在没有
smartgwt最新版本GWT的DEMO 谷歌web工具箱实例
GWT学习时的一些小例子,和大家分享,GWT学习时的一些小例子,和大家分享
GWT API文档(史上最全),通过java写WEBUI,开发必不可少的文档,Gwt将不同模块页面生成到相关文件及页面,使用IFrame方式将各个模块组合在在HTML页面中
这个文件是关于GWT开发的,属于入门级别的,GWT新手可以下载了看看。
基本概念及GWT结构及命令,开发等的介绍
最新火狐浏览器GWT开发插件,离线安装。不用在线等待!
gwt学习资料 java gwt相关学习网站 gwt图解 gwt教学 gwt安装部署 步骤流程