外部JavaScript给出了应交给一个名为Java方法的数量mycallback
。
我已经定义:
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));
和JavaScript调用是:
$wnd.callback(number_from_external_javascript);
但我得到的错误:
JS value of type number, expected com.google.gwt.core.client.JavaScriptObject
而我的终极目标是与参数类型的Java方法Integer
不是,JavascriptObject。 我只是想GWT应JavascriptObject将Javascript对象,但似乎不会。
GWT版本是2.4。
GWT将自动施放 JS Number值到任何Java数目基本类型( int
, double
等),JS字符串到Java String和JS布尔到Java boolean
。 它永远不会将它们作为JavaScriptObject
秒。
如果该号码不能为空,然后只用一个声明回调int
参数。 如果它可以为空,那么你就必须明确地创建一个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对象,而不是一个数值,所以这可能工作:
$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);
});
关于使用什么GWT出口商发电机暴露你的GWT代码,JS,所以你没有对付JSNI,你可以从中受益的很好的特性,它具有(复杂的对象,数组,闭包,叠加,doclet的,等等)
使用GWT出口商类只需要实现可输出,并使用注释暴露你的方法。
public static class MyClass implements Exportable {
@Export("$wnd.mycallback")
public static void mycallback(long number) {
Window.alert("" + number);
}
}
该行添加到您的onmoduleload离开编译器做的工作
public void onModuleLoad() {
ExporterUtil.exportAll();
}
然后,就像你说的,你可以使用的方法
<script>
window.mycallback(1234)
</script>