将来自外部javascript的javascript参数传递给java [英] Passing javascript parameter from external javascript to 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。
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 JavaScriptObject
s.
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屋!