繁体   English   中英

使用 GWT 的 JSNI 从 java 方法获取返回值

[英]Get returned value from java method with GWT's JSNI

我试图从 java 方法获取返回值,但它返回了一些非常奇怪的东西:它返回了我认为在 javascript 中编写的方法本身。

这里是 java 方法的代码:

public String getNameToShow() {
        return "Chart number 1";
    }

和 javascript 方法:

 public native void drawJSChart(String divId, int a, String jsData) /*-{
            try {
                //First create a script where to paste the jsData
                var scriptID = this.@myPackage.MyClass::getNameToShow();
                console.log(scriptID);
                //Some code
            } catch (e) {
                console.error(e.message);
            }
        }-*/;

谢谢你。

它返回 js 方法,因为您已经要求 js 方法。

从 JSNI 代码调用 java 方法应该如下所示:

var scriptID = this.@myPackage.MyClass::getNameToShow(*)(); //notice second pair of braces

基本上从 JSNI 调用 java 方法,你需要放置两对大括号。 首先定义方法参数类型(在我的例子中我使用了*所以它将匹配任何参数类型),第二个用于将参数传递给方法。

您也必须传递 Java function 的类型。 像这样写是可行的:

package XXXXX.client;

import com.google.gwt.core.client.EntryPoint;

class _24_TestJSNIMethodCallback implements EntryPoint {
    public void onModuleLoad() {
        drawJSChart();
    }

    public String getNameToShow() {
        return "Chart number 1";
    }

    public native void drawJSChart() /*-{
        try {
            //First create a script where to paste the jsData 
            var scriptID = this
                    .@XXXXX.client._24_TestJSNIMethodCallback::getNameToShow()();
            $wnd.alert(scriptID);
            //Some code 
        } catch (e) {
            console.error(e.message);
        }
    }-*/;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM