Serializar objetos JavaScripObject en GWT

Escrito por guillermo.cifuentes en March 16, 2009

Tengo un servicio web que acepta JSON o XML (es un JAX-RS), así que para crear o modificar recursos, los envío en JSON desde el cliente hecho en GWT. En GWT cuando quieres pasar de una cadena con un objeto JSON utilizas eval a través de la interfaz JSNI.

¿Pero para serializar objetos en cadenas? Ahora suponiendo que estás enviando los datos desde un FormHandler, en el método onSubmit querrás fijar los valores del objeto JSON y enviar la cadena en el método RequestBuilder.sendRequest. Creo que GWT-Ext provee utilidades para eso, pero si no lo estás utilizando, puedes utilizar esta librería en Javascript . Hay que descargarla y situarla en un directorio accesible por los navegadores. Debes de incluirla con una etiqueta script desde la página que carga la aplicación GWT.

La interfaz JSNI:

import com.google.gwt.core.client.JavaScriptObject;

public class JSON {

    protected JSON() {}

    public static final native String encode(JavaScriptObject object) /*-{
        return $wnd.JSON.stringify(object);
    }-*/;
    public static final native <T> T decode(String json) /*-{
        return eval('('+json+')');
    }-*/;

}

En el método encode, se utiliza el prefijo $wnd para llamar al objeto JSON que cargaste con la librerí­a javascript; si no haces explícito que el objeto al que llamas está cargado en Window tendrás un error en tiempo de compilación, aquí­ tienes más información.

Nota:En el método decode se utiliza un genérico para que el compilador averigue el tipo del lado izquierdo de la asignación (para no tener que hacer una conversión), es decir, que debes asignar el valor de vuelta del método a una variable de tipo deseado, sino tendrás un error por conflicto de tipos.

Trackbacks

Usar este enlace. to trackback from your own site.

Comentarios

Deja un comentario

Comentarios