Gwt 将javascript参数从外部javascript传递到java
外部javascript给出了一个数字,该数字应该交给名为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
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>