2012-04-06 40 views
1

我想从一个Java方法返回的值,但它返回的东西很奇怪:它返回自己写的方法在JavaScript中,我认为。获得从Java方法的返回值与GWT的JSNI

这里的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 = [email protected]::getNameToShow(); 
       console.log(scriptID); 
       //Some code 
      } catch (e) { 
       console.error(e.message); 
      } 
     }-*/; 

谢谢。

回答

1

你必须通过你的类型的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 
        [email protected]_24_TestJSNIMethodCallback::getNameToShow()(); 
      $wnd.alert(scriptID); 
      //Some code 
     } catch (e) { 
      console.error(e.message); 
     } 
    }-*/; 

} 
+0

非常感谢。它的工作,我想知道为什么它没有返回我所期望的! – 2012-04-06 10:41:41

5

这是因为,你已经问JS方法返回的js方法。

从JSNI代码Java方法调用应该是这样的:

var scriptID = [email protected]::getNameToShow(*)(); //notice second pair of braces 

基本上调用从JSNI Java方法,你就需要把2对括号。首先定义方法参数类型(在我的示例中,我使用了*,因此它将匹配任何参数类型),第二个用于将参数传递到方法中。