2012-04-06 4 views
1

Ich versuche, den zurückgegebenen Wert von einer Java-Methode, aber es gibt etwas sehr seltsam zurück: Es gibt die Methode selbst in Javascript geschrieben, denke ich.Get zurückgegeben Wert von Java-Methode mit GWT JSNI

Hier ist der Code der Java-Methode:

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

und die JavaScript-Methode:

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

Danke.

Antwort

1

Sie müssen auch die Typen Ihrer Java-Funktion übergeben. Schreiben Sie es so:

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

Vielen Dank. Es hat geklappt, ich habe mich gewundert, warum es nicht das zurückgegeben hat, was ich erwarte! –

5

Es gibt js-Methode zurück, weil Sie nach js-Methode gefragt haben.

Invocation von Java-Methoden aus JSNI Code sollte wie folgt aussehen:

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

Grundsätzlich Java-Methode von JSNI aufzurufen, müssen Sie zwei Paare von Klammern setzen. Zuerst werden die Methodenparametertypen definiert (in meinem Beispiel habe ich * verwendet, damit alle Parametertypen übereinstimmen), zweite wird verwendet, um Parameter an die Methode zu übergeben.