使用GWT的JSNI从java方法获取返回值
我试图从java方法中获取返回值,但它返回了一个非常奇怪的结果:它返回的方法本身是用javascript编写的 下面是java方法的代码:使用GWT的JSNI从java方法获取返回值,java,javascript,gwt,jsni,Java,Javascript,Gwt,Jsni,我试图从java方法中获取返回值,但它返回了一个非常奇怪的结果:它返回的方法本身是用javascript编写的 下面是java方法的代码: public String getNameToShow() { return "Chart number 1"; } 以及javascript方法: public native void drawJSChart(String divId, int a, String jsData) /*-{ try {
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方法,需要放置两对大括号。首先在我使用的示例中定义方法参数类型*,这样它将匹配任何参数类型,第二个用于将参数传递到方法。它返回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);
}
}-*/;
}
您还必须传递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);
}
}-*/;
}
谢谢。它成功了,我想知道为什么它没有返回我所期望的!谢谢。它成功了,我想知道为什么它没有返回我所期望的!