我需要从Javascript调用Java方法。所以我定义了方法:
private native void registerMethod() /*-{
var self = this;
$wnd.test = function(longParam) {
self.@mypackage.HomeView::test(Ljava/lang/Long;)(longParam);
};
}-*/;
Java方法:
private void test(Long longParam) {
GWT.log("Call to test with longParam = " + longParam);
}
JS电话:
public static native void paypalClose() /*-{
$wnd.alert(top.test);
top.test(10);
top.dgFlow.closeFlow();
top.close();
}-*/;
警报显示Javascript函数定义。如果我调用top.test()
,它会起作用,但不会传递任何参数。但是,如果我打电话给top.test(10)
,我会得到一个空的警报窗口。
答案 0 :(得分:4)
您的方法不包括java.lang.Long
,而不是long
,因此您必须创建Long
的实例。您可以使用@java.lang.Long::new
或@java.lang.Long::valueOf
,但您无法在JSNI中使用long
:https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI#important
因为JavaScript编号严格等同于Java double
,所以您应该使用double
或java.lang.Double
作为参数。一旦进入Java世界,如果你愿意,可以将double转换为long,而不是来自/在JSNI中。