将来自外部javascript的javascript参数传递给java [英] Passing javascript parameter from external javascript to java

查看:172
本文介绍了将来自外部javascript的javascript参数传递给java的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

外部JavaScript给出了一个数字,该数字应该交给名为 mycallback 的Java方法。



定义:

Java:

  class MyClass {
public static void mycallback(JavaScriptObject number){
//用数字
做某事}
}

Javascript:

  $ wnd.callback = $条目(@ com.package.MyClass: :myCallBack函数(LCOM /谷歌/ GWT /核心/客户端/ JavaScriptObject)); 

Javascript调用是:

  $ wnd.callback(number_from_external_javascript); 

但我得到错误:

 类型编号的JS值,预计为com.google.gwt.core.client.JavaScriptObject 

我的最终目标是拥有一个参数类型为 Integer 而不是JavascriptObject的java方法。我只是认为GWT应该将javascript对象封装在JavascriptObject中,但它似乎不会。



GWT版本是2.4。

int ), , double 等),JS String到Java String,以及JS Boolean到Java boolean 。它永远不会像 JavaScriptObject s那样传递它们。

如果数字不能为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 );
});

另外,我认为您可以将JS编号作为 JavaScriptObject 如果它是一个Number对象而不是一个Number值,那么这个可能起作用:

  $ wnd.callback = $ entry(function(n){
n = new Number(n); //box作为Number对象
@ com.packge.MyClass :: mycallback(Lcom / google / gwt / core / client / JavaScriptObject;)(n);
});


An external javascript gives a number that should be handed over to Java method named mycallback.

I have defined:

Java:

class MyClass {
    public static void mycallback(JavaScriptObject number) {
        // do something with the number
    }
}

Javascript:

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

And the Javascript call is:

$wnd.callback(number_from_external_javascript);

But I get error:

JS value of type number, expected com.google.gwt.core.client.JavaScriptObject

And my ultimate goal is to have a java method with parameter type of Integer, not of JavascriptObject. I just thought GWT should wrap javascript objects in JavascriptObject, but it seems it won't.

GWT version is 2.4.

解决方案

GWT will automatically cast a JS Number value to any Java number primitive type (int, double, etc.), JS String to Java String, and JS Boolean to Java boolean. It'll never pass them as JavaScriptObjects.

If the number cannot be null, then just declare your callback with an int argument. If it can be null, then you'll have to explicitly create an Integer instance, something like:

$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);
   });

Alternatively, I think you can pass a JS number as a JavaScriptObject if it's a Number object rather than a Number value, so this might work:

$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);
   });

这篇关于将来自外部javascript的javascript参数传递给java的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆