使用GWT'从java方法获取返回值;s JSNI

Get returned value from java method with GWT's JSNI

本文关键字:获取 返回值 JSNI 方法 GWT 使用 java      更新时间:2023-09-26

我试图从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函数的类型。像这样写:

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);
        }
    }-*/;
}