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

Gwt 将javascript参数从外部javascript传递到java,gwt,jsni,Gwt,Jsni,外部javascript给出了一个数字,该数字应该交给名为mycallback的Java方法 我定义了: 爪哇: Javascript: $wnd.callback = $entry(@com.package.MyClass::mycallback(Lcom/google/gwt/core/client/JavaScriptObject)); Javascript调用是: $wnd.callback(number_from_external_javascript); 但我得到了一个错误: J

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

我定义了:

爪哇:

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
我的最终目标是拥有一个参数类型为
Integer
,而不是JavascriptObject的java方法。我只是认为GWT应该在JavascriptObject中包装javascript对象,但似乎不会

GWT版本为2.4。

GWT将自动将JS数字值转换为任何Java数字基元类型(
int
double
,等等),JS字符串转换为Java字符串,JS布尔值转换为Java
布尔值。它永远不会将它们作为
JavaScriptObject
s传递

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

或者,我认为如果JS数字是数字对象而不是数字值,则可以将其作为
JavaScriptObject
传递,因此这可能会起作用:

$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代码公开给js,这样您就不必处理jsni,并且可以受益于它的优秀特性(复杂对象、数组、闭包、覆盖、doclet等)

使用gwt exporter,您的类只需实现Exportable并使用注释来公开您的方法

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>

window.mycallback(1234)

这是一个非常有用的答案。建议的两种方法都有效。我不知道你能把它转换成整数。非常感谢。
public void onModuleLoad() {
  ExporterUtil.exportAll();
}
<script>
  window.mycallback(1234)
</script>