JSNI使用Long参数调用Java方法

时间:2012-05-17 18:04:13

标签: gwt jsni

我需要从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),我会得到一个空的警报窗口。

1 个答案:

答案 0 :(得分:4)

您的方法不包括java.lang.Long,而不是long,因此您必须创建Long的实例。您可以使用@java.lang.Long::new@java.lang.Long::valueOf,但您无法在JSNI中使用longhttps://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI#important

因为JavaScript编号严格等同于Java double,所以您应该使用doublejava.lang.Double作为参数。一旦进入Java世界,如果你愿意,可以将double转换为long,而不是来自/在JSNI中。