miércoles, 21 de septiembre de 2011

Using JSNI in GWT

Se puede combinar fácilmente código JavaScript directamente en el código de GWT. Es todo JavaScript al final. Eso es acerca de lo que JSNI se trata. Es un nombre similar al Java Native Interface (JNI), ya que utiliza la misma idea básica: declarar un método Java "nativo" y luego usar otro lenguaje para implementarlo. En el caso de JSNI, ese otro lenguaje es JavaScript. :)

A los ejemplos...

Podemos mostrar un alert como usualmente lo hacíamos con JavaScript .. alert('This is an alert!');


public class MyApp implements EntryPoint {

     public void onModuleLoad() {

         Window.alert(’Showing alert from GWT’);
         showAlert("Some string...");

     }

     public native void showAlert(String param)/*-{

         $wnd.alert('Showing alert from JavaScript' + param);

     }-*/;

}

También podemos hacer el camino inverso... invocar métodos de Java desde JavaScript utilizando JSNI

public class BlueApp implements EntryPoint {

     public void onModuleLoad() {

          setShowTrigger(this);

     }

     public void runApp() {

          Window.alert(’I am a GWT function’);

     }

     public native void setShowTrigger(BlueApp x)/*-{

          $wnd.showBlueApp = function () {

               x.@com.company.client.BlueApp::runApp()();

          };

     }-*/;

}

Cuando se carga el módulo se crea una función JavaScript llamada showBlueApp(), y nada más. Esa función puede ser invocada desde la página HTML, ahí se ejecutará el método runApp(). Este está referenciado en JavaScript con su path completo el cual incluye además el nombre del módulo. La variable x es la clase misma y es enviada como parámetro usando “this”. Una vez invocado el alert aparece.
La función showBlueApp debería ser invocada como cualquier otra función JavaScript desde el HTML.


onclick="showBlueApp()"
   
Links útiles: - Tutorial en PDF
              - GWT Blog Article

Saludos. =)


1 comentario:

  1. Se agradece la ayuda!!!

    Por si logran ver esto, podrian orientarme, como manejo variables entre JSNI
    Tengo un metodo en JSNI le quiero pasar parametros a otro JSNI =D se agradece!.

    ResponderEliminar