2012-04-06 41 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對括號。首先定義方法參數類型(在我的示例中,我使用了*,因此它將匹配任何參數類型),第二個用於將參數傳遞到方法中。