在GWT中,我们如何在javascript和java之间共享对象?

时间:2013-07-17 10:28:17

标签: gwt gwt-rpc gwt2 jsni

我的类中有一个pojo,其中包含一些在java中操作Maps和Arrays的方法。此对象用于RPC调用以承载我的配置。我有一个机制,在进行任何RPC调用之前,我执行一个javascript函数。现在我真正想要的是将我的配置对象传递给这个javascript函数,这个javascript函数可以操作这个配置对象,最后这个被操作的对象将在我的RPC调用中传递。

那么如何将我的java对象传递给javascript并允许操作呢?

1 个答案:

答案 0 :(得分:1)

首先,您无法直接从javascript操作Java对象。但是你可以做的是将一组静态方法导出到javascript并使用它们来操纵你的对象。这是以这种方式完成的:

public void onModuleLoad() {
    exportHelloMethod(this);
}
public String exportedMethod(String name) {
    // Manipulate your java classes here
    // return something to JS
}
// Create a reference in the browser to the static java method
private native void exportHelloMethod(HelloClass instance) /*-{
  $wnd.hello = instance@[...]HelloClass::exportedMethod(Ljava/lang/String;);
}-*/;

幸运的是,有一个库允许以更简单的方式导出java方法和类。它是gwt-exporter,您只需在类中实现Exportable并使用一组注释,以便导出器生成器完成所有工作。

@ExportPackage("jsc")
@Export
public class MyClass implements Exportable {
  public void show(String s){
  }
}

public void onModuleLoad() {
  ExporterUtil.exportAll();
}

然后在javascript中你可以实例化和操作类:

 var myclass = new jsc.MyClass();
 myclass.show('whatever');