2011-12-23 23 views
6

È possibile chiamare i metodi Java (GWT) da Javascript? Inoltre, non è chiaro dalla documentazione. Tutti i campioni qui http://code.google.com/intl/ru/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html dimostrano di chiamare funzioni java da funzioni JSNI (non JS).Come chiamare la funzione java GWT da Javascript?

UPDATE 1

Ecco un codice Java:

public class Test_GoogleWeb_JSNI_02 implements EntryPoint { 
/** 
* This is the entry point method. 
*/ 
public void onModuleLoad() { 
} 

public static void Callee() { 
    Window.alert("Callee"); 
} 
} 

Ecco campioni pulsante chiamante in html:

<input type='button' value='Call' onclick='Test02()'> 

e qui ci sono alcune funzioni che ho provato e che sono stati non funzionante:

<script type="text/javascript"> 

    function Test01() { 
     @com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()(); 
    } 

    function Test02() { 
     com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()(); 
    } 


</script> 

UPDATE 2

I seguenti lavorato.

Java preparazione:

public void onModuleLoad() { 
    Prepare(); 
} 

public static native void Prepare() /*-{ 
    $doc.calleeRunner = @com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee(); 
}-*/; 

public static void Callee() { 
    Window.alert("Callee"); 
} 

Caller:

function Test03() { 
     document.calleeRunner(); 
} 

C'è un modo migliore?

+0

è possibile chiamare un metodo javascrypt che restituisce un oggetto? e usa quell'oggetto? –

risposta

10

l'esempio non funzionerà, dal momento che si sta tentando di utilizzare JSNI in alcuni script esterni. Se si desidera chiamare qualcosa dal esterni JS è necessario utilizzare l'approccio descritto nel presente question o utilizzare GWT exporter

UPDATE:

Il modo più sicuro per esporre la roba GWT è quello di avvolgere invocazione in qualche altro funzione. Per esempio:

public native void expose()/*-{ 
    $wnd.exposedMethod = function(param){ 
     @com.my.MyClass::myFunction(*)(param); 
    } 
}-*/; 

In caso contrario si potrebbero incontrare alcuni bug strano in modalità di produzione =)

+0

Grazie! L'aggiornamento riguarda il mio Update2? Voglio dire, suggerisco di non scrivere '[email protected] :: myFunction (*) (param)'? Perché? – Dims

+0

Potrebbe impedire a GWT di eseguire un'ottimizzazione di base. L'impatto sulle prestazioni molto probabilmente non sarà grande, ma dovresti tenerlo a mente. Anche il tuo modo funziona solo con l'esposizione di metodi statici, molto probabilmente si interrompe se provi a chiamare qualche metodo di istanza. – jusio

+0

puoi chiamare un metodo javascrypt che restituisce un oggetto? e usa quell'oggetto? –

Problemi correlati