2011-12-23 10 views
6

¿Es posible llamar a los métodos Java (GWT) desde Javascript? Tampoco está claro a partir de la documentación. Todas las muestras aquí http://code.google.com/intl/ru/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html demuestran llamar a las funciones Java desde las funciones JSNI (no JS).¿Cómo llamar a la función Java de GWT desde Javascript?

ACTUALIZA 1

Aquí es un código de 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"); 
} 
} 

Aquí está muestras de botón de llamada en html:

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

Y aquí están algunas de las funciones que probé y que eran no funcionó:

<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> 

ACTUALIZACIÓN 2

Los siguientes trabajaban.

preparación

Java:

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"); 
} 

de llamadas:

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

¿Hay una mejor manera?

+0

se puede llamar a un método JavaScrypt que devuelve un objeto? y usar ese objeto? –

Respuesta

10

su ejemplo no va a funcionar, ya que está tratando de usar JSNI en algunas secuencias de comandos externas. Si desea llamar a algo de JS externos es necesario utilizar el enfoque descrito en este question o utilizar GWT exporter

ACTUALIZACIÓN:

La forma más segura para exponer el material GWT es envolver la invocación de alguna otra función. Por ejemplo:

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

De lo contrario puede encontrarse con algunos errores extraños en el modo de producción =)

+0

Gracias! ¿Estás actualizando sobre mi actualización2? Quiero decir, ¿sugieres que no escribas '[email protected] :: myFunction (*) (param)'? ¿Por qué? – Dims

+0

Podría evitar que GWT realice una optimización básica. Es probable que el impacto en el rendimiento no sea grande, pero debes tenerlo en cuenta. También tu camino solo funcionará con la exposición de métodos estáticos, lo más probable es que se rompa si intentas llamar a algún método de instancia. – jusio

+0

¿puedes llamar a un método javascrypt que devuelve un objeto? y usar ese objeto? –

Cuestiones relacionadas