<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog &#187; java</title>
	<atom:link href="http://guillermocifuentes.com/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://guillermocifuentes.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sat, 04 Jul 2009 17:30:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Serializar objetos JavaScripObject en GWT</title>
		<link>http://guillermocifuentes.com/2009/03/16/serializar-objetos-javascripobject-en-gwt/</link>
		<comments>http://guillermocifuentes.com/2009/03/16/serializar-objetos-javascripobject-en-gwt/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 12:55:04 +0000</pubDate>
		<dc:creator>guillermo.cifuentes</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[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? [...]]]></description>
			<content:encoded><![CDATA[<p>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 <em>eval</em> a través de la interfaz JSNI.</p>
<p>¿Pero para serializar objetos en cadenas? Ahora suponiendo que estás enviando los datos desde un FormHandler, en el método <em>onSubmit</em> querrás fijar los valores del objeto JSON y enviar la cadena en el método <em>RequestBuilder.sendRequest</em>. Creo que GWT-Ext provee utilidades para eso, pero si no lo estás utilizando, puedes <a href="http://www.json.org/json2.js">utilizar esta librería en Javascript </a>. Hay que descargarla y situarla en un directorio accesible por los navegadores. Debes de incluirla con una etiqueta <em>script</em> desde la página que carga la aplicación GWT.</p>
<p>La interfaz JSNI:</p>
<pre class="brush: java;">
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 &lt;T&gt; T decode(String json) /*-{
        return eval('('+json+')');
    }-*/;

}
</pre>
<p>En el método <em>encode</em>, se utiliza el prefijo <strong>$wnd</strong> 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 <em>Window</em> tendrás un error en tiempo de compilación, <a href="http://googlewebtoolkit.blogspot.com/2008/07/getting-to-really-know-gwt-part-1-jsni.html">aquí­ tienes más información</a>.</p>
<blockquote><p><strong>Nota:</strong>En el método <em>decode</em> 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.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://guillermocifuentes.com/2009/03/16/serializar-objetos-javascripobject-en-gwt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
