将javascript参数从外部javascript传递到java

ega*_*aga 2 gwt jsni

外部javascript给出一个应该移交给命名的Java方法的数字mycallback.

我已经定义:

Java的:

class MyClass {
    public static void mycallback(JavaScriptObject number) {
        // do something with the number
    }
}
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

$wnd.callback = $entry(@com.package.MyClass::mycallback(Lcom/google/gwt/core/client/JavaScriptObject));
Run Code Online (Sandbox Code Playgroud)

而Javascript调用是:

$wnd.callback(number_from_external_javascript);
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

JS value of type number, expected com.google.gwt.core.client.JavaScriptObject
Run Code Online (Sandbox Code Playgroud)

我的最终目标是使用参数类型为java的java方法Integer,而不是JavascriptObject.我只是认为GWT应该在JavascriptObject中包装javascript对象,但它似乎不会.

GWT版本是2.4.

Tho*_*yer 7

GWT将自动一个JS Number值到任何Java数原始类型(int,double等),JS字符串到Java String和JS布尔到Java boolean.它永远不会像JavaScriptObjects 一样传递它们.

如果数字不能为null,则只需使用int参数声明回调.如果它可以为null,那么您将必须显式创建一个Integer实例,如:

$wnd.callback = $entry(function(n) {
      if (number != null) {
         // box into java.lang.Integer
         number = @java.lang.Integer::valueOf(I)(n);
      }
      @com.packge.MyClass::mycallback(Ljava/lang/Integer;)(number);
   });
Run Code Online (Sandbox Code Playgroud)

或者,我认为你可以传递一个JS数字,JavaScriptObject如果它是一个Number对象而不是Number值,所以这可能有效:

$wnd.callback = $entry(function(n) {
      n = new Number(n); // "box" as a Number object
      @com.packge.MyClass::mycallback(Lcom/google/gwt/core/client/JavaScriptObject;)(n);
   });
Run Code Online (Sandbox Code Playgroud)