1

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)と、null アラート ウィンドウが表示されます。

4

1 に答える 1

4

メソッドは、java.lang.Longではなく、を除いlongているため、のインスタンスを作成する必要がありますLong。JSNIでもsを使用できない場合を除いて、@java.lang.Long::newまたはを使用できます: https ://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI#important@java.lang.Long::valueOflong

JavaScriptの数値はJavaと厳密に同等であるため、引数としてまたはをdouble使用する必要があります。Javaの世界に入ると、必要に応じてdoubleをlongにキャストできますが、JSNIから/でキャストすることはできません。doublejava.lang.Double

于 2012-05-17T18:54:42.647 に答える