<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8501111367129157984</id><updated>2012-01-22T09:44:18.471-08:00</updated><title type='text'>Google Web Toolkit - Documentación en Español</title><subtitle type='html'>Éste blog trata de recopilar la mayor cantidad de información acerca de Google Web Toolkit en español.
Incluye textos traducidos, tutoriales, recursos, etc.
(de momento solo es un esbozo, aún no están completos los textos)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>51</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-1653061537259463820</id><published>2010-04-21T06:09:00.000-07:00</published><updated>2010-04-21T06:15:47.078-07:00</updated><title type='text'>Gran sorteo de El Androide Libre</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Vfej1QU7bQI/S876L7-RCqI/AAAAAAAAA5k/Avhx7Sy7JsA/s1600/nexus-one.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 240px; height: 196px;" src="http://1.bp.blogspot.com/_Vfej1QU7bQI/S876L7-RCqI/AAAAAAAAA5k/Avhx7Sy7JsA/s400/nexus-one.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5462578481031350946" /&gt;&lt;/a&gt;&lt;br /&gt;Como sabrán, ultimamente he estado muy metido en el mundo de Android, aprendiendo y desarrollando aplicaciones. Así que este concurso que se realiza en &lt;strong&gt;&lt;a href="http://www.elandroidelibre.com/"&gt;www.elandroidelibre.com&lt;/a&gt;&lt;/strong&gt; me viene de perlas. El premio mayor no es nada menos sino un Nexus One!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Claro, también hay más premios, como una camiseta+chapa+muñeco de android.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Las reglas son sencillas, debes hacer una entrada en tu blog &lt;a href="http://www.elandroidelibre.com/2010/04/el-gran-sorte-de-el-androide-libre.html"&gt;mencionando el concurso&lt;/a&gt; y enlazando el home de los organizadores.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Eso es todo, un saludo y espero ser un feliz ganador ^_^&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-1653061537259463820?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/1653061537259463820/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=1653061537259463820&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/1653061537259463820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/1653061537259463820'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2010/04/gran-sorteo-de-el-androide-libre.html' title='Gran sorteo de El Androide Libre'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Vfej1QU7bQI/S876L7-RCqI/AAAAAAAAA5k/Avhx7Sy7JsA/s72-c/nexus-one.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-3071945936284267454</id><published>2007-09-17T11:17:00.000-07:00</published><updated>2007-09-17T13:25:52.966-07:00</updated><title type='text'>¡ Bienvenido !</title><content type='html'>Bienvenido a la página no-Oficial de Google Web Toolkit en español. Ésta página está dedicada a recopilar la mayor cantidad de información posible acerca de Google Web Toolkit en castellano, para lo cual se pretende traducir parte de la información existente en la página oficial, como guías de desarrollo, referencias de la API, etc.&lt;br /&gt;&lt;ul&gt;&lt;li style="font-weight: bold;"&gt;Visión general de Google Web Toolkit&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/qu-es-google-web-toolkit.html"&gt;¿Qué es Google Web Toolkit?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/caractersticas-de-google-web-toolkit.html"&gt;Características de Google Web Toolkit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/porqu-traducir-cdigo-java-javascript.html"&gt;¿Porqué traducir código Java a JavaScript?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/usando-google-web-toolkit.html"&gt;Usando Google Web Toolkit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/depuracin-y-desarrollo-de-aplicaciones.html"&gt;Depuración y desarrollo de aplicaciones en Google Web Toolkit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/la-arquitectura-de-google-web-toolkit.html"&gt;La arquitectura de Google Web Toolkit&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li style="font-weight: bold;"&gt;¡ Estoy listo, quiero comenzar !&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/instalacin-de-google-web-toolkit.html"&gt;Cómo instalar Google Web Toolkit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/crear-una-aplicacin-de-cero.html"&gt;Crear una aplicación desde cero (sin Eclipse)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/creando-una-aplicacin-con-eclipse.html"&gt;Crear una aplicación con Eclipse&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li style="font-weight: bold;"&gt;Guia para el desarrollador&lt;/li&gt;&lt;ul&gt;&lt;li style="font-style: italic;"&gt;Lo fundamental de GWT&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/el-compilador-de-google-web-tooltik.html"&gt;El compilador de Google Web Toolkit&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/soporte-del-lenguaje-java.html"&gt;Soporte del lenguaje Java&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/soporte-runtime-library.html"&gt;Soporte al Runtime Library&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/soporte-cross-browser-dhtml.html"&gt;Soporte para DHTML&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/depuracin-en-modo-hosted.html"&gt;Depuración en modo hosted (hosted mode)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/desarrollo-en-modo-web.html"&gt;Desarrollo en modo web (web mode)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/pginas-html.html"&gt;Páginas HTML alojadas en un proyecto GWT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/cdigo-del-lado-del-cliente-client-side.html"&gt;Código del lado del cliente (client-side code)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/cdigo-del-lado-del-servidor-server-side.html"&gt;Código del lado del servidor (server-side code)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/estructura-de-un-proyecto.html"&gt;Estructura de un proyecto GWT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/mdulos.html"&gt;Los módulos en GWT&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/formato-de-mdulo-xml.html"&gt;Formato de los módulos XML&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/inclusin-de-recursos-automtico.html"&gt;Inclusión automática de recursos&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/filtrando-paquetes-pblicos-public.html"&gt;Filtrando paquetes públicos&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/herramientas-de-la-lnea-de-comandos.html"&gt;Herramientas de la línea de comandos&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/projectcreator.html"&gt;projectCreator&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/applicationcreator.html"&gt;applicationCreator&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/junitcreator.html"&gt;junitCreator&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/i18ncreator.html"&gt;i18nCreator&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/benchmarkviewer.html"&gt;benchmarkCreator.&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/construyendo-interfaces-de-usuario.html"&gt;Construyendo interfaces de usuario&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/widgets-y-paneles.html"&gt;Widgets y paneles&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/galera-de-widgets.html"&gt;Galería de widgets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/events-y-listeners.html"&gt;Events y Listeners&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/creando-widgets-personalizados.html"&gt;Creando Widgets personalizados&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/entendiendo-los-layouts.html"&gt;Entendiendo los layouts&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/hojas-de-estilo.html"&gt;Hojas de estilo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/atado-de-imgenes.html"&gt;Atado de imágenes (image bundle)&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/creando-y-usando-image-bundle.html"&gt;Creación y uso de ImageBundle&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li style="font-style: italic;"&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/rpc-invocacin-de-procedimientos-remotos.html"&gt;RPC: Invocación de Métodos Remoto&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/anatoma-de-rpc.html"&gt;La anatomía de RPC en Google Web Toolkit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/creando-servicios.html"&gt;Creación de servicios&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/implementando-servicios.html"&gt;Implementación de servicios&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/realizando-una-invocacin.html"&gt;Realizando invocaciones a servicios&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-3071945936284267454?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/3071945936284267454/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=3071945936284267454&amp;isPopup=true' title='17 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/3071945936284267454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/3071945936284267454'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/index.html' title='¡ Bienvenido !'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-6092259061364996295</id><published>2007-09-17T10:06:00.000-07:00</published><updated>2007-09-17T10:21:11.781-07:00</updated><title type='text'>Lo fundamental de Google Web Toolkit</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/el-compilador-de-google-web-tooltik.html"&gt;El compilador de Google Web Toolkit&lt;br /&gt;&lt;/a&gt;Es un compilador que traduce tu código Java en código JavaScript&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/soporte-runtime-library.html"&gt;Soporte del lenguaje Java&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/soporte-runtime-library.html"&gt;Soporte al Runtime Library&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/soporte-cross-browser-dhtml.html"&gt;Soporte para DHTML&lt;br /&gt;&lt;/a&gt;La arcquitectura de Google Web Toolkit le permite a tus aplicaciones correr de igual forma, sobre los distintos navegadores&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/soporte-cross-browser-dhtml.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/depuracin-en-modo-hosted.html"&gt;Depuración en modo hosted (hosted mode)&lt;br /&gt;&lt;/a&gt;Un navegador web incrustado en Google Web Toolkit, te permitirá correr y depurar tus aplicaciones en Java, antes de que estas sean convertidas a JavaScript&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/depuracin-en-modo-hosted.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/desarrollo-en-modo-web.html"&gt;Desarrollo en modo web (web mode)&lt;br /&gt;&lt;/a&gt;Convierte tu aplicación a JavaScript y pruébala sobre cualquier navegador&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/desarrollo-en-modo-web.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/pginas-html.html"&gt;Páginas HTML alojadas en un proyecto GWT&lt;br /&gt;&lt;/a&gt;Los módulos Google Web Toolkit son embebidos dentro de archivos HTML comunes&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/pginas-html.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/cdigo-del-lado-del-cliente-client-side.html"&gt;Código del lado del cliente (client-side code)&lt;br /&gt;&lt;/a&gt;El código del lado del cliente, es el código ya traducido a JavaScript, listo para correr sobre un navegador&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/cdigo-del-lado-del-cliente-client-side.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/cdigo-del-lado-del-servidor-server-side.html"&gt;Código del lado del servidor (server-side code)&lt;br /&gt;&lt;/a&gt;Se refiere al código que se ejecuta en el servidor en forma de ByteCodes&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/cdigo-del-lado-del-servidor-server-side.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/estructura-de-un-proyecto.html"&gt;Estructura de un proyecto GWT&lt;br /&gt;&lt;/a&gt;Se explica cómo debe ser la estructura interna de un proyecto de Google Web Toolkit&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/estructura-de-un-proyecto.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/mdulos.html"&gt;Los módulos en GWT&lt;br /&gt;&lt;/a&gt;Los módulos son archivos XML que contienen las configuraciones de tu proyecto&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/mdulos.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/filtrando-paquetes-pblicos-public.html"&gt;Formato de los módulos XML&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/filtrando-paquetes-pblicos-public.html"&gt;Inclusión automática de recursos&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/filtrando-paquetes-pblicos-public.html"&gt;Filtrando paquetes públicos&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/herramientas-de-la-lnea-de-comandos.html"&gt;Herramientas de la línea de comandos&lt;br /&gt;&lt;/a&gt;Google Web toolkit proporciona una serie de herramientas que funcionan desde una consola (terminal), conoce cuales son y cómo se usan!&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/herramientas-de-la-lnea-de-comandos.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/benchmarkviewer.html"&gt;projectCreator&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/benchmarkviewer.html"&gt;applicationCreator&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/benchmarkviewer.html"&gt;junitCreator&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/benchmarkviewer.html"&gt;i18nCreator&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/benchmarkviewer.html"&gt;benchmarkCreator&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-6092259061364996295?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/6092259061364996295/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=6092259061364996295&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/6092259061364996295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/6092259061364996295'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/lo-fundamental-de-google-web-toolkit.html' title='Lo fundamental de Google Web Toolkit'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-8630769065002388354</id><published>2007-09-17T09:57:00.000-07:00</published><updated>2007-09-17T10:32:32.450-07:00</updated><title type='text'>Guia para el desarrollador</title><content type='html'>En ésta entrada se lista la información importante acerca de muchas de las partes y/o conceptos que existen en Google Web Toolkit,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/lo-fundamental-de-google-web-toolkit.html"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Lo fundamental de GWT&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/el-compilador-de-google-web-tooltik.html"&gt;El compilador de Google Web Toolkit&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/soporte-cross-browser-dhtml.html"&gt;Soporte para DHTML&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/depuracin-en-modo-hosted.html"&gt;Depuración en modo hosted (hosted mode)&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/desarrollo-en-modo-web.html"&gt;Desarrollo en modo web (web mode)&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/pginas-html.html"&gt;Páginas HTML alojadas en un proyecto GWT&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/cdigo-del-lado-del-cliente-client-side.html"&gt;Código del lado del cliente (client-side code)&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/cdigo-del-lado-del-servidor-server-side.html"&gt;Código del lado del servidor (server-side code)&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/estructura-de-un-proyecto.html"&gt;Estructura de un proyecto GWT&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/mdulos.html"&gt;Los módulos en GWT&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/formato-de-mdulo-xml.html"&gt;&lt;/a&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/herramientas-de-la-lnea-de-comandos.html"&gt;Herramientas de la línea de comandos&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a style="font-weight: bold; font-style: italic;" href="http://esgooglewebtoolkit.blogspot.com/2007/09/construyendo-interfaces-de-usuario.html"&gt;Construyendo interfaces de usuario&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/widgets-y-paneles.html"&gt;Widgets y paneles&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/galera-de-widgets.html"&gt;Galería de widgets&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/events-y-listeners.html"&gt;Events y Listeners&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/creando-widgets-personalizados.html"&gt;Creando Widgets personalizados&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/entendiendo-los-layouts.html"&gt;Entendiendo los layouts&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/hojas-de-estilo.html"&gt;Hojas de estilo&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/atado-de-imgenes.html"&gt;Atado de imágenes (image bundle)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold; font-style: italic;" href="http://esgooglewebtoolkit.blogspot.com/2007/09/rpc-invocacin-de-procedimientos-remotos.html"&gt;RPC: Invocación de Métodos Remoto&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/anatoma-de-rpc.html"&gt;La anatomía de RPC en Google Web Toolkit&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/creando-servicios.html"&gt;Creación de servicios&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/implementando-servicios.html"&gt;Implementación de servicios&lt;/a&gt; | &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/realizando-una-invocacin.html"&gt;Realizando invocaciones a servicios&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic; color: rgb(204, 153, 51);"&gt;Ésta entrada es apenas un esbozo, aún hace falta parte de la documentación&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-8630769065002388354?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/8630769065002388354/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=8630769065002388354&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8630769065002388354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8630769065002388354'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/guia-para-el-desarrollador.html' title='Guia para el desarrollador'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-2963092943510788517</id><published>2007-09-17T09:45:00.000-07:00</published><updated>2007-09-17T09:52:57.293-07:00</updated><title type='text'>Comenzando en Google Web Toolkit</title><content type='html'>Las siguientes entradas te proporcionarán la información suficiente, para que des tus primeros pasos en el desarrollo bajo Google Web Toolkit.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/instalacin-de-google-web-toolkit.html"&gt;Cómo instalar Google Web Toolkit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/crear-una-aplicacin-de-cero.html"&gt;Crear la base de una aplición desde cero (sin Eclipse)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/creando-una-aplicacin-con-eclipse.html"&gt;Crear un proyecto de Eclipse para desarrollar aplicaciones GWT&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: right;"&gt;&lt;span style="color: rgb(204, 153, 51); font-style: italic;font-size:85%;" &gt;Esto es solo un esbozo, aún falta por incluir un par de ejemplos&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-2963092943510788517?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/2963092943510788517/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=2963092943510788517&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/2963092943510788517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/2963092943510788517'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/comenzando-en-google-web-toolkit.html' title='Comenzando en Google Web Toolkit'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-8904710858380240550</id><published>2007-09-17T08:03:00.000-07:00</published><updated>2007-09-17T09:02:08.175-07:00</updated><title type='text'>Creando una aplicación con Eclipse</title><content type='html'>Con GWT puedes crear proyectos de Eclipse que te permitirán usar este magnífico IDE para desarrollar y depurar tu aplicación. Para crear un proyecto de Eclipse es necesario primero &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/crear-una-aplicacin-de-cero.html"&gt;crear una aplicación&lt;/a&gt; base, así:&lt;br /&gt;&lt;p class="consola"&gt;applicationCreator -eclipse ProyectoGWT client.MiAplicacion&lt;/p&gt;&lt;br /&gt;Con esto crearás la base de tu aplicación, y un archivo de configuración para Eclipse, en donde se le indica al mismo el &lt;span style="font-style: italic;"&gt;cómo compilar tu proyecto&lt;/span&gt;; luego deberás crear la estructura del proyecto en sí:&lt;br /&gt;&lt;p class="consola"&gt;projectCreator -eclipse ProyectoGWT&lt;/p&gt;&lt;br /&gt;El paso a seguir es añadir el proyecto a tu workspace del Eclipse. Para abrimos Eclipse, abrimos el menú File -&amp;gt; &lt;span style="font-style: italic;"&gt;Import&lt;/span&gt;, luego seleccionamos "&lt;span style="font-style: italic;"&gt;Existing Projects into Workspace&lt;/span&gt;":&lt;br /&gt;&lt;br /&gt;&lt;a href="http://img118.imageshack.us/img118/522/pantallazoimportnu1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://img118.imageshack.us/img118/522/pantallazoimportnu1.png" alt="importar proyecto" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Clic en &lt;span style="font-style: italic;"&gt;Next&lt;/span&gt;, y luego seleccionamos la opción "&lt;span style="font-style: italic;"&gt;Select root directory&lt;/span&gt;", y digitamos la ruta en donde hayamos creado el proyecto. Y si deseamos copiar los archivos de nuestra aplicación dentro del path definido como "workspace", pues marcas la opción "Copy projects into workspace", personalmente prefiero dejarlo allí:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://img46.imageshack.us/img46/1995/pantallazoimport2dd1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://img46.imageshack.us/img46/1995/pantallazoimport2dd1.png" alt="importar proyecto" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Clien en "&lt;span style="font-style: italic;"&gt;Finish&lt;/span&gt;", y eso es todo! Ahora podrás crear, editar y depurar los archivos Java de tu aplicación, además de la posibilidad de ejecutar tu aplicación en &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/depuracin-en-modo-hosted.html"&gt;modo hosted&lt;/a&gt; directamnete con el botón "Run":&lt;br /&gt;&lt;br /&gt;&lt;a href="http://img513.imageshack.us/img513/6397/todons1.png" title="Clic para ver la imagen mas grande"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://img339.imageshack.us/img339/3426/todo2jp4.png" alt="importar proyecto" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ahora solo queda que te pongas a desarrollar tu programa, y a disfutar de las ventajas que te ofrece un IDE como eclipse!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-8904710858380240550?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/8904710858380240550/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=8904710858380240550&amp;isPopup=true' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8904710858380240550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8904710858380240550'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/creando-una-aplicacin-con-eclipse.html' title='Creando una aplicación con Eclipse'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-7701792148245728512</id><published>2007-09-16T13:59:00.000-07:00</published><updated>2008-08-19T06:57:34.523-07:00</updated><title type='text'>Cadena de enlaces LETRASMATIC.COM</title><content type='html'>Si queres participar segui estas reglas:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Dejar un comentario en &lt;a href="http://www.letras.videosmatic.com/cadena-de-enlaces-letrasmaticcom-gana-60-enlaces-para-tu-blog/"&gt;letrasmatic.com&lt;/a&gt; diciendo que quieres participar en la cadena y, así mismo, dejando los siguientes datos:&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;Deja tu nombre : Texto&lt;/li&gt;&lt;li&gt;Deja tu Link : www.tuweb.com&lt;/li&gt;&lt;li&gt;Deja tu Link de la Cadena: www.tuweb.com/cadena_de_enlaces_letrasmatic/&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;2. Una vez dejado el comentario en letrasmatic, deberás poner un nuevo post en tu blog con la cadena de enlaces. &lt;/p&gt;&lt;p&gt;3. &lt;span style="font-weight: bold;"&gt;&lt;span style="text-decoration: underline;"&gt;LA CADENA HA DE ACTUALIZARSE CADA VIERNES&lt;/span&gt;, O DE LO CONTRARIO TU BLOG SERÁ ELIMINADO DE LA CADENA. Todos los viernes revisaremos todas las cadenas para ver que están actualizando la cadena periódicamente.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;4. La cadena constará de 60 enlaces.&lt;/p&gt;&lt;p style="font-weight: bold; font-style: italic; text-align: center; text-decoration: underline;"&gt;CADENA DE ENLACES&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.letras.videosmatic.com/" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.letrasmatic.com/" target="_blank"&gt;Lyrics&lt;/a&gt; –&gt; &lt;a href="http://www.letras.videosmatic.com/cadena-de-enlaces-letrasmaticcom-gana-60-enlaces-para-tu-blog/" target="_blank"&gt;Ver cadena &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.videosmatic.com/" target="_blank"&gt;Videos&lt;/a&gt; -&gt; &lt;a href="http://www.videosmatic.com/cadena-de-enlaces-letrasmatic/" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.videosadolor.es/"&gt;Youtube&lt;/a&gt; -&gt; &lt;a href="http://www.videosadolor.es/cadena-de-enlaces-letrasmaticcom-gana-50-enlaces-para-tu-blog"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.f1inlive.com/" target="_blank"&gt;Formula 1 &lt;/a&gt;-&gt; &lt;a href="http://www.f1inlive.com/cadena-de-enlaces-letrasmaticcom-gana-60-enlaces-para-tu-blog/" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://formula3.f1inlive.com/" target="_blank"&gt;Formula 3&lt;/a&gt; -&gt; &lt;a href="http://formula3.f1inlive.com/cadena-de-enlaces-letrasmatic/" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rbdlove.com/" target="_blank"&gt;RBD Rebelde&lt;/a&gt; -&gt; &lt;a href="http://www.rbdlove.com/webs-amigas-ha-conocer/" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.heroesabc.com/" target="_blank"&gt;Serie Heroes&lt;/a&gt; -&gt; &lt;a href="http://www.heroesabc.com/otras-webs-a-conocer/" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://drhouse-fan.blogspot.com/" target="_blank"&gt;Dr House&lt;/a&gt; -&gt; &lt;a href="http://drhouse-fan.blogspot.com/2008/06/webs-conocer.html" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://deportesenvideos.com/category/videos-futbol/" target="_blank"&gt;Videos de futbol &lt;/a&gt;-&gt; &lt;a href="http://deportesenvideos.com/deportes/enlaces-letrasmatic/" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://1videosmusica.com/" target="_blank"&gt;Videos de Musica&lt;/a&gt; -&gt; &lt;a href="http://1videosmusica.com/enlaces-de-junio-2008/" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.tarijalibre.tarijaindustrial.com/" target="_blank"&gt;Bolivia Tarija&lt;/a&gt;-&gt; &lt;a href="http://www.tarijalibre.tarijaindustrial.com/cadena-de-enlaces/otra-cadena-de-enlaces/desde-letrasmaticcom/" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.boliviaenblogs.com/" target="_blank"&gt;Bolivia en Blogs&lt;/a&gt;-&gt; &lt;a href="http://www.boliviaenblogs.com/otra-cadena-de-enlaces/desde-letrasmaticcom/" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://gasenbolivia.wordpress.com/" target="_blank"&gt;Gas en Bolivia&lt;/a&gt;-&gt; &lt;a href="http://gasenbolivia.wordpress.com/otra-cadena-de-enlaces/desde-letrasmaticcom/" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://musica.videosadolor.es/" target="_blank"&gt;Música&lt;/a&gt; -&gt; &lt;a href="http://musica.videosadolor.es/cadena-de-enlaces-letrasmaticcom" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://habitaquosdetodalavida.blogspot.com/" target="_blank"&gt;Expo Zaragoza&lt;/a&gt;-&gt; &lt;a href="http://habitaquosdetodalavida.blogspot.com/2008/06/enlaces-interesantes.html" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.phylosoft.com/" title="Phylosoft"&gt;Phylosoft&lt;/a&gt;-&gt; &lt;a href="http://www.phylosoft.com/cadena-de-enlaces-letrasmatic/" title="Cadena de Enlaces Letrasmatic en Phylosoft"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jennydemalaga.es/"&gt;Mi Ventana&lt;/a&gt;-&gt; &lt;a href="http://www.jennydemalaga.es/general/cadena-de-enlaces-letrasmatic/"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.pilladas.info/" target="_blank"&gt;Pilladas&lt;/a&gt; -&gt; &lt;a href="http://www.pilladas.info/2008/07/el-sube-y-baja-del-google.html" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://myowngreenlife.blogspot.com/"&gt;&lt;span style="font-family: verdana;"&gt;Green Life &lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;-&gt;&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; &lt;a href="http://myowngreenlife.blogspot.com/2008/07/cadena-de-enlaces-letrasmatic.html"&gt;Ver cadena&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.efeblog.com/"&gt;EFE Blog&lt;/a&gt; -&gt; &lt;a href="http://www.efeblog.com/cadena-de-enlaces-letrasmatic-52/"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://amebasaladeriva.com/" target="_blank"&gt;Amebas a la deriva&lt;/a&gt;-&gt; &lt;a href="http://amebasaladeriva.com/cadena-de-enlaces-letrasmatic/internet-y-ordenadores/" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://electrotecnica.blogspot.com/"&gt;Electrotécnica&lt;/a&gt; -&gt; &lt;a href="http://electrotecnica.blogspot.com/2008/05/cadena-de-enlaces-letrasmatic.html"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://elrincondebender.com/"&gt;El rincón de Bender&lt;/a&gt; -&gt; &lt;a href="http://elrincondebender.com/cadena-de-enlaces-letrasmatic/varios/" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://juegos-humor-noticias.com/" target="_blank"&gt;Juegos, humor y noticias&lt;/a&gt; -&gt; &lt;a href="http://juegos-humor-noticias.com/cadena-de-enlaces-letrasmatic/varios/" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://lacocinadebender.com/"&gt;La cocina de Bender&lt;/a&gt; -&gt; &lt;a href="http://lacocinadebender.com/cadena-de-enlaces-letrasmatic/varios/" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://noticias-musica.com/"&gt;Noticias de música&lt;/a&gt; -&gt; &lt;a href="http://noticias-musica.com/cadena-de-enlaces-letrasmatic/varios/"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://deluxecelebrities.com/"&gt;Deluxe celebrities&lt;/a&gt; -&gt; &lt;a href="http://deluxecelebrities.com/cadena-de-enlaces-letrasmatic/uncategorized/"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://actualidad-noticias-famosos.com/"&gt;Actualidad y noticias de famosos&lt;/a&gt; -&gt; &lt;a href="http://actualidad-noticias-famosos.com/cadena-de-enlaces-letrasmatic/varios/"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://juegos-vestir-maquillar-peluqueria.com/"&gt;Juegos de vestir, maquillar y peluquería&lt;/a&gt; -&gt; &lt;a href="http://juegos-vestir-maquillar-peluqueria.com/cadena-de-enlaces-letrasmatic/uncategorized/"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://elsacelsius.blogspot.com/"&gt;Elsacelsius&lt;/a&gt; -&gt; &lt;a href="http://elsacelsius.blogspot.com/2008/07/cadena-de-enlaces-letrasmatic_10.html"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.videosgratis.blogzilla.es/" target="_blank"&gt;Youtube&lt;/a&gt; -&gt; &lt;a href="http://www.videosgratis.blogzilla.es/cadena-letrasmatic/"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.avrillavignex.com/" target="_blank"&gt;Avril Lavigne&lt;/a&gt; -&gt; &lt;a href="http://www.avrillavignex.com/otros-sitios-para-visitar/" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://gruporebelde-rbd.blogspot.com/"&gt;Grupo RBD&lt;/a&gt; -&gt; &lt;a href="http://gruporebelde-rbd.blogspot.com/2008/07/cadena-de-enlaces-letrasmaticcom.html"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://musicadance.net/"&gt;Música Dance&lt;/a&gt; -&gt; &lt;a href="http://musicadance.net/?s=letrasmatic"&gt;Ver Cadena&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://granhermano-5-argentina.blogspot.com/"&gt;Gran Hermano&lt;/a&gt; -&gt; &lt;a href="http://granhermano-5-argentina.blogspot.com/2008/07/cadena-de-enlaces-letrasmaticcom.html"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://granhermano2009argentina.blogspot.com/"&gt;Gran Hermano 2009&lt;/a&gt; -&gt; &lt;a href="http://granhermano2009argentina.blogspot.com/2008/07/cadena-de-enlaces-letrasmaticcom.html"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogmileycyrus.blogspot.com/"&gt;Miley Cyrus&lt;/a&gt; -&gt; &lt;a href="http://blogmileycyrus.blogspot.com/2008/07/cadena-de-enlaces-letrasmaticcom.html"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://highschoolmusical3senioryear.blogspot.com/2008/01/biografia-de-zac-efron.html"&gt;Zac Efron&lt;/a&gt; -&gt; &lt;a href="http://highschoolmusical3senioryear.blogspot.com/2008/07/cadena-de-enlaces-letrasmaticcom.html"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://greatfutbol.blogspot.com/"&gt;Noticias Futbol&lt;/a&gt; -&gt; &lt;a href="http://greatfutbol.blogspot.com/2008/07/cadena-de-enlaces-letrasmaticcom.html"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogdietas.blogspot.com/"&gt;Dietas&lt;/a&gt; -&gt; &lt;a href="http://blogdietas.blogspot.com/2008/07/cadena-de-enlaces-letrasmaticcom.html"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://joomlablogs.blogspot.com/"&gt;Joomla CMS&lt;/a&gt; -&gt; &lt;a href="http://joomlablogs.blogspot.com/2008/07/cadena-de-enlaces-letrasmaticcom.html"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://concursohabitaquo.blogspot.com/"&gt;Concurso SEO&lt;/a&gt; -&gt; &lt;a href="http://concursohabitaquo.blogspot.com/2008/07/cadena-de-enlaces-letrasmaticcom.html"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://laeradelhielo3.blogspot.com/"&gt;Era de Hielo&lt;/a&gt; -&gt; &lt;a href="http://laeradelhielo3.blogspot.com/2008/07/cadena-de-enlaces-letrasmaticcom.html"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;&lt;a href="http://myowngreenmusic.blogspot.com/"&gt;Green Music&lt;/a&gt; -&gt; &lt;a href="http://myowngreenmusic.blogspot.com/2008/07/cadena-de-enlaces-letrasmatic.html"&gt;Ver Cadena&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://casidiablo.net/"&gt;Linux y Programación en Java&lt;/a&gt; -&gt; &lt;a href="http://casidiablo.net/cadena-de-enlaces-letrasmatic/"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.misteriosyleyendas.com/"&gt;fantasmas ovnis&lt;/a&gt; -&gt; &lt;a href="http://www.misteriosyleyendas.com/60-blogs-de-letrasmatic"&gt;Ver Cadena &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/" target="_blank"&gt;Documentación Google Web Toolkit en español&lt;/a&gt; -&gt; &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/cadena-de-enlaces-letrasmaticcom.html" target="_blank"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.fotoleyenda.com/"&gt;Fotoleyenda&lt;/a&gt; -&gt; &lt;a href="http://www.fotoleyenda.com/2008/07/26/60-blogs-por-letras-matic/"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://estrellasyshow.blogspot.com/"&gt;patinando por un sueño&lt;/a&gt; -&gt; &lt;a href="http://estrellasyshow.blogspot.com/2008/07/60-links-de-letrasmaticcom-para-tu-blog.html"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://midietadelospuntos.com/" title="mi dieta de los puntos"&gt;Mi dieta de los puntos ww&lt;/a&gt; -&gt; &lt;a href="http://midietadelospuntos.com/2008/07/30/cadena-de-enlaces-letrasmatic-gana-60-enlaces-para-tu-blog/" title="cadena letrasmatic"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.recetasdeladietadelospuntos.com/" title="Recetas de dieta ww de los puntos"&gt;Recetas de dieta ww de los puntos&lt;/a&gt; -&gt; &lt;a href="http://www.recetasdeladietadelospuntos.com/2008/07/30/60-enlaces-gratis-para-tu-blog-cadena-de-enlaces" title="cadena letrasmatic"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.gourmetgastronomico.com/" title="gourmet gastronomico delicatessen y gastronomia"&gt;Gourmet gastronomico delicatessen y gastronomia&lt;/a&gt; -&gt; &lt;a href="http://www.gourmetgastronomico.com/2008/07/30/promocion-web-60-enlaces-gratis" title="promocion web 60 enlaces gratis"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogomania.es/" title="Directorio de blogs"&gt;directorio blogs&lt;/a&gt; -&gt; &lt;a href="http://bl0g0mania.blogspot.com/2008/07/enlaces-interesantes.html"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://noticiasfamosos.com/"&gt;Noticias de famosos&lt;/a&gt; -&gt; &lt;a href="http://noticiasfamosos.com/varios/cadena-de-enlaces-letrasmatic/"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://musicavip.info/"&gt;Conciertos 2008&lt;/a&gt; -&gt; &lt;a href="http://musicavip.info/2008/07/cadena-de-letras.html"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.juegos-nuevos-bonitos.com/"&gt;Juegos nuevos bonitos&lt;/a&gt;-&gt; &lt;a href="http://www.juegos-nuevos-bonitos.com/?p=65"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://cocinarecetasinfo/" title="Vegetarianismo"&gt;Recetas vegetarianas&lt;/a&gt; -&gt; &lt;a href="http://cocinarecetas.info/2008/08/reactivamos-el-blog.html"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.juegosmatic.com/"&gt;Juegos&lt;/a&gt; -&gt; &lt;a href="http://www.juegosmatic.com/cadena-letrasmatic/"&gt;Ver Cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://jovencitaspilladas.com/" target="_blank"&gt;Jovencitas pilladas&lt;/a&gt; -&gt; &lt;a href="http://jovencitaspilladas.com/cadena-de-enlaces-letrasmatic/varios/" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://lacoctelera.com/coleccionismo/" target="_blank"&gt;Coleccionismo&lt;/a&gt; -&gt; &lt;a href="http://www.lacoctelera.com/coleccionismo/post/2008/08/15/promocion-blogs" target="_blank"&gt;Ver cadena&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt; &lt;/p&gt;Animate y participa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-7701792148245728512?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/7701792148245728512/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=7701792148245728512&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/7701792148245728512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/7701792148245728512'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/cadena-de-enlaces-letrasmaticcom.html' title='Cadena de enlaces LETRASMATIC.COM'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-4577200117687781508</id><published>2007-09-11T13:58:00.000-07:00</published><updated>2007-09-11T14:03:55.125-07:00</updated><title type='text'>Visión general de Google Web Toolkit</title><content type='html'>Al parecer estás interesado en conocer acerca de Google Web Toolkit, talvez seas un desarrollador de software o talvez simplemente tengas curiosidad, en todo caso aquí podrás encontrar bastante información al respecto, conociendo lo fundamental:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/qu-es-google-web-toolkit.html"&gt;¿Qué es Google Web Toolkit?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/caractersticas-de-google-web-toolkit.html"&gt;Características de Google Web Toolkit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/porqu-traducir-cdigo-java-javascript.html"&gt;¿Porqué traducir código Java a JavaScript?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/usando-google-web-toolkit.html"&gt;Usando Google Web Toolkit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/depuracin-y-desarrollo-de-aplicaciones.html"&gt;Depuración y desarrollo de aplicaciones en Google Web Toolkit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/la-arquitectura-de-google-web-toolkit.html"&gt;La arquitectura de Google Web Toolkit&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Si piensas que puede faltar algo, no dudes en hacer tus sugerencias!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-4577200117687781508?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/4577200117687781508/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=4577200117687781508&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/4577200117687781508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/4577200117687781508'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/visin-general-de-google-web-toolkit.html' title='Visión general de Google Web Toolkit'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-3841990344322258705</id><published>2007-09-11T09:11:00.000-07:00</published><updated>2007-09-17T09:39:04.245-07:00</updated><title type='text'>Crear una aplicación de cero</title><content type='html'>&lt;p class="consejo"&gt;Si estás leyendo esto imagino que ya has &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/instalacin-de-google-web-toolkit.html"&gt;instalado el Google Web Toolkit&lt;/a&gt; en tu sistema operativo, y habrás configurado adecuadamente las variables de entorno.&lt;/p&gt;&lt;br /&gt;Google Web Toolkit viene con una utilidad (para consola/línea de comandos) incluida llamada &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/applicationcreator.html"&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;applicationCreator&lt;/span&gt;&lt;/a&gt; que genera automáticamente los archivos que necesitarás para comenzar a desarrollar un proyecto GWT. Además puede también generar proyectos para el IDE &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; lo que permite que el desarrollo y depuración de aplicaciones GWT sea bastante fácil.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: rgb(255, 102, 0);font-family:verdana;font-size:130%;"  &gt;&lt;span style="font-weight: bold;"&gt;Crear una nueva aplicación&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Basado en la &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/estructura-de-un-proyecto.html"&gt;estructura básica de un proyecto GWT&lt;/a&gt;, la clase principal de tu aplicación debe estar en un subpaquete de &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;client&lt;/span&gt;. Puedes crear una nueva aplicación llamada HolaGWT de la siguiente manera:&lt;br /&gt;&lt;br /&gt;&lt;p class="consola"&gt;applicationCreator com.loquesea.client.HolaGWT&lt;/p&gt;&lt;p&gt;&lt;br /&gt;El script &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/applicationcreator.html"&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;applicationCreator&lt;/span&gt;&lt;/a&gt; generará un número de archivos en &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;src/com/loquesea/&lt;/span&gt;, incluyendo el típico "Hello, world" en la clase &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;src/com/loquesea/client/HolaGWT.java&lt;/span&gt;. Además, el script genera otro script llamado&lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt; HolaGWT-shell&lt;/span&gt; que sirve para correr nuestra aplicación en &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/depuracin-en-modo-hosted.html"&gt;modo hosted&lt;/a&gt;, y un script para compilar la aplicación a JavaScript llamado &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;HolaGWT-compile&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;No es necesario indicar un nombre de proyecto tan largo, esto solo se hace para "organizar" mejor las cosas. Lo único obligatorio es la creación de paquete client, por lo que si quieres algo simple te bastará con ejecutar &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;applicationCreator client.MiAplicacion&lt;/span&gt;.&lt;/p&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Para tener en cuenta...&lt;/span&gt; en GNU/Linux los script mencionados anteriormente no llevan extensión, y además es necesario ejecutarlos con privilegios de administración (en algunos casos). Puedes usar el comando &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;su&lt;/span&gt;, para logarte como root. O si usa Ubuntu puedes anteponer el comando &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;sudo&lt;/span&gt;.&lt;br /&gt;&lt;p class="consejo"&gt;En Windows, los scripts tienen la extensión .cmd, y su utilización es la misma. En este caso, ya que uso GNU/Linux, el ejemplo va a ser sobre Debian.&lt;/p&gt;&lt;p style="text-align: center;" class="consejo"&gt;&lt;span style="color: rgb(255, 102, 0);font-family:verdana;font-size:130%;"  &gt;&lt;span style="font-weight: bold;"&gt;Ejecuta tu nueva aplicación en modo hosted&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;Para correr tu nueva aplicación en &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/depuracin-en-modo-hosted.html"&gt;modo hosted&lt;/a&gt;, ejecuta el script &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;HolaGWT-shell&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://img160.imageshack.us/img160/3303/gwtvr0.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://img413.imageshack.us/img413/7826/miniaturagwtce9.png" alt="Gwt en Linux" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="color: rgb(255, 102, 0);font-family:verdana;font-size:130%;"  &gt;&lt;span style="font-weight: bold;"&gt;Ejecuta tu nueva aplicación en modo web&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Puedes también usar el botón "Compile/Browser" del navegador, con lo cual GWT compilará automáticamente tu aplicación a JavaScript, y lanzará la aplicación en tu navegador Web predeterminado.&lt;/p&gt;&lt;br /&gt;&lt;a href="http://img513.imageshack.us/img513/2688/pantallazowrapperhtmlfokr8.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://img524.imageshack.us/img524/5862/ppantallazowrapperhtmlfju9.png" alt="Gwt en Linux" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Para los amantes del pingüino...&lt;/span&gt; en ocasiones, en sistemas GNU/Linux, es necesario configurar la variable de entorno GWT_DEFAULT_BROWSER, en donde debes colocar la ruta de tu navegador preferido. Puedes hacer esto así:&lt;br /&gt;&lt;/p&gt;&lt;p class="consola"&gt;echo "#Path navegador predeterminado para GWT" &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;echo "GWT_DEFAULT_BROWSER=/usr/bin/firefox" &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;echo "export GWT_DEFAULT_BROWSER" &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;source ~/.bashrc&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="color: rgb(255, 102, 0);font-family:verdana;font-size:130%;"  &gt;&lt;span style="font-weight: bold;"&gt;Compilar tu aplicación&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;El proceso de compilación, traduce todo el código en Java que hayas escrito y lo traduce a JavaScript. Para compilarlo solamente debes ejecutar el script  &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;HolaGWT-compile&lt;/span&gt;. Cuando lo hagas por primera vez, se creará un directorio llamado www, en donde se encontrarán todos los archivos HTML y JavaScript de tu aplicación. De esta forma, y cuando hayas terminado la aplicación, simplemente tendrás que copiar dichos archivos al servidor web de producción, y estará todo listo para que un usuario final disfrute de tu programa.&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="color: rgb(255, 102, 0);font-family:verdana;" &gt;Modifica la aplicación por defecto&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Como ya hemos dicho, cuando creas una nueva aplicación, GWT te crea por defecto un archivo &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;.java&lt;/span&gt; con el nombre de tu aplicación, y dentro de este un ejemplo de un "Hola mundo", por lo que para crear tu aplicación solo debes modificar dicho archivo.&lt;br /&gt;&lt;br /&gt;Ésta entrada es solo una pequeña introducción, por lo que nos limitaremos a hacer solo lo ya comentado. Para ver ejemplos de creación de aplicaciones un más avanzadas, puedes ver los ejemplos que vienen incluidos en la carpeta de instalación de Google Web Toolkit.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-3841990344322258705?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/3841990344322258705/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=3841990344322258705&amp;isPopup=true' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/3841990344322258705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/3841990344322258705'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/crear-una-aplicacin-de-cero.html' title='Crear una aplicación de cero'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-3864195449738338693</id><published>2007-09-11T08:36:00.000-07:00</published><updated>2007-09-17T09:38:04.459-07:00</updated><title type='text'>Creando y usando image bundle</title><content type='html'>Para definir un &lt;span style="font-style: italic;"&gt;image bundle&lt;/span&gt;, el usuario necesita extender la interfaz &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.ImageBundle.html"&gt;ImageBundle&lt;/a&gt;. La interfaz ImageBundle es una etiqueta que puede ser extendida para definir nuevas ImageBundle.&lt;br /&gt;&lt;br /&gt;La interfaz derivada puede tener cero o más métodos, donde cada método:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;no toma parámetros&lt;/li&gt;&lt;li&gt;tiene un tipo de retorno &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.AbstractImagePrototype.html"&gt;AbstractImagePrototype&lt;/a&gt;, y&lt;/li&gt;&lt;li&gt;puede tener un metadata &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;gwt.resource&lt;/span&gt; opcional lo que especifica el nombre del archivo de imagen en el classpath del módulo.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Los tipos de archivo válidos son &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;png&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;gif&lt;/span&gt;, y &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;jpg&lt;/span&gt;. Si el nombre de la imagen contiene caracteres “/”, se asume que es un recurso en el classpath, formateado como lo hubiera hecho &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;ClassLoader.getResource(String)&lt;/span&gt;. De otra forma, la imagen debe estar situada en el mismo paquete que el usuario ha definido.&lt;br /&gt;&lt;br /&gt;Si la metadata &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;gwt.resource&lt;/span&gt; no es especificada, entonces&lt;br /&gt;&lt;ul&gt;&lt;li&gt;se supone que el nombre de archivo de la imagen es comparada con el nombre del método&lt;/li&gt;&lt;li&gt;se asume que la extensión es &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;.png&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;gif&lt;/span&gt; o &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;.jpg&lt;/span&gt; y&lt;/li&gt;&lt;li&gt;que el archivo está en el mismo paquete que la interfaz derivada&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;En caso de que allá múltiples archivos de imagen con diferentes extensiones, el orden de precedencia de extensiones es (1) &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;png&lt;/span&gt;, (2) &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;gif&lt;/span&gt; y (3) &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;jpg&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Un ImageBundle para los iconos de un procesador de texto podría ser definido así:&lt;br /&gt;&lt;p class="codigo"&gt;public interface WordProcessorImageBundle extends ImageBundle {&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Would match the file 'new_file_icon.png', 'new_file_icon.gif', or&lt;br /&gt;* 'new_file_icon.png' located in the same package as this type.&lt;br /&gt;*/&lt;br /&gt;public AbstractImagePrototype new_file_icon();&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Would match the file 'open_file_icon.gif' located in the same&lt;br /&gt;* package as this type.&lt;br /&gt;*&lt;br /&gt;* @gwt.resource open_file_icon.gif&lt;br /&gt;*/&lt;br /&gt;public AbstractImagePrototype openFileIcon();&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Would match the file 'savefile.gif' located in the package&lt;br /&gt;* 'com.mycompany.mygwtapp.icons', provided that this package is part&lt;br /&gt;* of the module's classpath.&lt;br /&gt;*&lt;br /&gt;* @gwt.resource com/mycompany/mygwtapp/icons/savefile.gif&lt;br /&gt;*/&lt;br /&gt;public AbstractImagePrototype saveFileIcon();&lt;br /&gt;}&lt;/p&gt;&lt;br /&gt;Los métodos en un &lt;span style="font-style: italic;"&gt;image bundle&lt;/span&gt; retornan objetos &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;AbstractImagePrototype&lt;/span&gt; (en vez de objetos &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Image&lt;/span&gt;, como se podría esperar), ya que los objetos &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;AbstractImagePrototype&lt;/span&gt; proveen un aligeramiento adicional del peso de la imagen. Por ejemplo, el método &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.AbstractImagePrototype.html#getHTML%28%29"&gt;AbstractImagePrototype.getHTML()&lt;/a&gt; provee un fragmento HTML representa una imágen sin tener que crear una instancia del actual widget de &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Image.html"&gt;imagen&lt;/a&gt;. En algunos casos, esto puede ser más eficiente para administrar imágenes usando esos fragmentos de HTML.&lt;br /&gt;&lt;br /&gt;Otro uso para &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;AbstractImagePrototype&lt;/span&gt; es utilizar &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.AbstractImagePrototype.html#applyTo%28com.google.gwt.user.client.ui.Image%29"&gt;AbstractImagePrototype.applyTo(Image)&lt;/a&gt; para transformar un objeto &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Image&lt;/span&gt; exitente dentro de uno que encaje con el prototipo sin tener que instanciar otro objeto &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Image&lt;/span&gt;. Esto puede ser útil si tu aplicación posee imágenes que necesiten ser cambiadas de acuerdo a alguna acción por parte del usuario. De momento, si lo que necesitas es un objeto &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Image&lt;/span&gt;, el método &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.AbstractImagePrototype.html#createImage%28%29"&gt;&lt;span style="font-family:courier new;"&gt;AbstractImagePrototype.createImage()&lt;/span&gt;&lt;/a&gt; puede ser usado para generar nuevas instancias de &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Image&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;El siguiente ejemplo muestra como usar el image bundle que definimos en tu aplicación:&lt;br /&gt;&lt;p class="codigo"&gt;public void useImageBundle() {&lt;br /&gt;WordProcessorImageBundle wpImageBundle = (WordProcessorImageBundle) GWT.create(WordProcessorImageBundle.class);&lt;br /&gt;HorizontalPanel tbPanel = new HorizontalPanel();&lt;br /&gt;tbPanel.add(wpImageBundle.new_file_icon().createImage());&lt;br /&gt;tbPanel.add(wpImageBundle.openFileIcon().createImage());&lt;br /&gt;tbPanel.add(wpImageBundle.saveFileIcon().createImage());&lt;br /&gt;}&lt;/p&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Related topics&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.ImageBundle.html"&gt;ImageBundle&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.AbstractImagePrototype.html"&gt;AbstractImagePrototype&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-3864195449738338693?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/3864195449738338693/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=3864195449738338693&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/3864195449738338693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/3864195449738338693'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/creando-y-usando-image-bundle.html' title='Creando y usando image bundle'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-4553206699077027037</id><published>2007-09-11T08:13:00.000-07:00</published><updated>2007-09-17T09:29:51.774-07:00</updated><title type='text'>Atado de imágenes (image bundle)</title><content type='html'>Generalmente, una aplicación utiliza muchas imágenes pequeñas para iconos. Una petición al servidor debe ser enviada por cada una de las imágenes, y en algunos casos, el tamaño de la imagen es menor que la cabecera de la petición en sí, que es enviada con los datos de la imagen.&lt;br /&gt;&lt;br /&gt;Éste tipo de peticiones son muy ineficientes para el servidor. Además, Siempre que las imágenes hayan sido guardadas en caché por el cliente, una petición 304 (“no modificado”) es enviada para verificar que la imagen no haya sido modificada. Puesto que las imágenes no cambian muy a menudo, estas peticiones de verificaciones son también malas para el servidor.&lt;br /&gt;&lt;br /&gt;Enviar muchas peticiones al servidor, para recibir imágenes y comprobar que no han cambiado hace que tu aplicación sea muy lenta. HTTP 1.1 hace que los navegadores limiten el número de conexiones HTTP a dos por dominio/puerto. Una gran cantidad de peticiones de imágenes satura las conexiones disponibles del navegador, lo cual bloquea las peticiones RPC de la aplicación. Las peticiones RPC son un trabajo más importante que tu aplicación debe realizar.&lt;br /&gt;&lt;br /&gt;Para resolver este problema, GWT introduce el concepto de imágenes atadas (image bundle). Una imagen atada, es un conjunto de imágenes dentro de una sola imagen, con una interfaz para accesar a las imágenes individualmente. De esta forma, en vez de hacer una petición al servidor por cada imagen que necesites, la aplicación realiza solo una petición y recupera todas las imágenes.&lt;br /&gt;&lt;br /&gt;Ya que los nombres de archivo de la composición de imágenes está basado en un &lt;span style="font-style: italic;"&gt;hash&lt;/span&gt; del contenido del archivo, el nombre de archivo cambiará solamente si la imagen es cambiada. Esto significa que es seguro para los clientes guardar en caché la composición de imágenes permanentemente, lo que evita estar verificando innecesariamente si las imágenes han sufrido cambios en el servidor. Para lograr esto, la configuración del servidor necesita especificar que la composición de imágenes nunca expira. Además de la velocidad de carga de tu aplicación, usar image bundle previene el efecto “bouncy” al cargar las imágenes en el navegador.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Especificaciones&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/creando-y-usando-image-bundle.html"&gt;Creando y usando image bundle&lt;/a&gt;&lt;br /&gt;Define un &lt;span style="font-style: italic;"&gt;image bundle&lt;/span&gt; y úsalo en tu aplicación&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.UserInterface.ImageBundles.InteractionWithLocalization.html"&gt;Image bundle y localización&lt;/a&gt;&lt;br /&gt;Crea &lt;span style="font-style: italic;"&gt;locale-sensitive image bundle&lt;/span&gt; para usar las capacidades de localización de GWT&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Entradas relacionadas&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.ImageBundle.html"&gt;ImageBundle&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-4553206699077027037?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/4553206699077027037/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=4553206699077027037&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/4553206699077027037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/4553206699077027037'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/atado-de-imgenes.html' title='Atado de imágenes (image bundle)'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-5141702793800466181</id><published>2007-09-11T07:30:00.000-07:00</published><updated>2007-09-17T09:28:18.815-07:00</updated><title type='text'>Hojas de estilo</title><content type='html'>Los widgets de GWT confian su estilo visual a hojas de estilo en cascada. Cada widget tiene un nombre de estilo asociado que lo enlaza a una regla CSS. Un nombre de estilo de widget es asignado usando el método &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.UIObject.html#setStyleName%28java.lang.String%29"&gt;setStyleName()&lt;/a&gt;. Por ejemplo, &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Button.html"&gt;Button&lt;/a&gt; tiene como nombre de estilo por defecto &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;gwt-Button&lt;/span&gt;. En ese orden de ideas, si tu desearas por ejemplo asignar un tamaño específico a la &lt;span style="font-style: italic;"&gt;letra&lt;/span&gt; (fuente) de todos los botones de tu aplicación, podrías usar la siguiente regla en tu archivo CSS:&lt;br /&gt;&lt;p class="codigo"&gt;&lt;br /&gt;.gwt-Button { font-size: 150%; }&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Estilos complejos&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Algunos widgets tienen asociados tipos de estilos más complejos. &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.MenuBar.html"&gt;MenuBar&lt;/a&gt;, por ejemplo, tiene los siguientes estilos:&lt;br /&gt;&lt;p class="codigo"&gt;&lt;br /&gt;.gwt-MenuBar { the menu bar itself }&lt;br /&gt;.gwt-MenuBar .gwt-MenuItem { menu items }&lt;br /&gt;.gwt-MenuBar .gwt-MenuItem-selected { selected menu items }&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;En este ejemplo, se tienen dos reglas que aplican a los items de los menús. El primero aplica a todos los items de los menús, mientras el segundo (con el sufijo &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;-selected&lt;/span&gt;) aplica solo para el item de menú que esté seleccionado. Un nombre de estilo de ítem de menú seleccionado será asignado a “&lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;gwt-MenuItem gwt-MenuItem-selected&lt;/span&gt;”, especificando que ambas reglas de estilo serán aplicadas. La manera más común de hacer esto es usar &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.UIObject.html#setStyleName%28java.lang.String%29"&gt;setStyleName&lt;/a&gt; para asignar el estilo de nombre base, luego &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.UIObject.html#addStyleName%28java.lang.String%29"&gt;addStyleName()&lt;/a&gt; y &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.UIObject.html#removeStyleName%28java.lang.String%29"&gt;removeStyleName()&lt;/a&gt; para añadir y remover el segundo nombre de estilo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Archivos CSS&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Generalmente, las hojas de estilo son situados en paquetes que son parte del módulo &lt;span style="font-style: italic;"&gt;public path&lt;/span&gt;. Entonces simplemente incluye una referencia a la hoja de estilo en tu página HTML, así:&lt;br /&gt;&lt;p class="codigo"&gt;&lt;br /&gt;&amp;lt;link rel="stylesheet" href="mystyles.css" type="text/css"&amp;gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-5141702793800466181?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/5141702793800466181/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=5141702793800466181&amp;isPopup=true' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/5141702793800466181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/5141702793800466181'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/hojas-de-estilo.html' title='Hojas de estilo'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-3509626148203803755</id><published>2007-09-11T06:53:00.000-07:00</published><updated>2007-09-17T09:27:57.464-07:00</updated><title type='text'>Entendiendo los layouts</title><content type='html'>Los paneles en GWT son similares a sus contra parte en otras clases de librerías. La principal diferencia reside en el hecho de que estos usan elementos HTML como &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;DIV&lt;/span&gt; o &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;TABLE&lt;/span&gt; para disponer los widgets.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;RootPanel&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;El primer panel que probablemente usarás es &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.RootPanel.html"&gt;RootPanel&lt;/a&gt;. Éste panel además es la raíz de la jerarquía de paneles. El &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;RootPanel&lt;/span&gt; por defecto envuelve el cuerpo del documento HTML, y es obtenido invocando el método &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.RootPanel.html#get%28%29"&gt;RootPanel.get()&lt;/a&gt;. Si necesitas envolver otro elemento del documento HTML con &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;RootPanel&lt;/span&gt;, tu puedes usar el método &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.RootPanel.html#get%28%29"&gt;RootPanel.get(String)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CellPanel&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.CellPanel.html"&gt;CellPanel&lt;/a&gt; es la clase abstracta de &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.DockPanel.html"&gt;DockPanel&lt;/a&gt;, &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.HorizontalPanel.html"&gt;HorizontalPanel&lt;/a&gt;, y &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.VerticalPanel.html"&gt;VerticalPanel&lt;/a&gt;. Lo que tienen estos paneles en común es que posicionan sus widgets dentro de celdas lógicas. Por ende, un widget hijo puede ser puede ser alineado dentro de la celda que lo contiene, usando el método &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.CellPanel.html#setCellHorizontalAlignment%28com.google.gwt.user.client.ui.Widget,%20com.google.gwt.user.client.ui.HasHorizontalAlignment.HorizontalAlignmentConstant%29"&gt;setCellHorizontalAlignment()&lt;/a&gt;, y &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.CellPanel.html#setCellVerticalAlignment%28com.google.gwt.user.client.ui.Widget,%20com.google.gwt.user.client.ui.HasVerticalAlignment.VerticalAlignmentConstant%29"&gt;setCellVerticalAlignment()&lt;/a&gt;. Los CellPanel también te permiten configurar el tamaño de las celdas usando &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.CellPanel.html#setCellWidth%28com.google.gwt.user.client.ui.Widget,%20java.lang.String%29"&gt;CellPanel.setCellWidth&lt;/a&gt; y &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.CellPanel.html#setCellHeight%28com.google.gwt.user.client.ui.Widget,%20java.lang.String%29"&gt;CellPanel.setCellHeight&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Otros paneles&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Otros paneles incluyen &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.DeckPanel.html"&gt;DeckPanel&lt;/a&gt;, &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.TabPanel.html"&gt;TabPanel&lt;/a&gt;, &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.FlowPanel.html"&gt;FlowPanel&lt;/a&gt;, &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.HTMLPanel.html"&gt;HTMLPanel&lt;/a&gt;, y &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.StackPanel.html"&gt;StackPanel&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tamaños y medidas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Es posible asignar un tamaño explicitamente a un widget usando los métodos &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.UIObject.html#setWidth%28java.lang.String%29"&gt;setWidth()&lt;/a&gt;, &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.UIObject.html#setHeight%28java.lang.String%29"&gt;setHeight()&lt;/a&gt;, y &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.UIObject.html#setSize%28java.lang.String,%20java.lang.String%29"&gt;setSize()&lt;/a&gt;. Los argumentos para esos métodos son strings, en vez de enteros, ya que así aceptan cualquier valor CSS válido, como valores de píxeles (214px), centímetros (3cm), y porcentajes (80%).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-3509626148203803755?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/3509626148203803755/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=3509626148203803755&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/3509626148203803755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/3509626148203803755'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/entendiendo-los-layouts.html' title='Entendiendo los layouts'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-5218303897454195433</id><published>2007-09-11T06:36:00.000-07:00</published><updated>2007-09-17T09:27:23.521-07:00</updated><title type='text'>Creando Widgets personalizados</title><content type='html'>GWT permite que la creación de widgets personalizados sea muy fácil, usando el lenguaje Java.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Composites&lt;/span&gt;&lt;br /&gt;Los composites son de lejos la manera más efectiva de crear widgets. Puedes fácilmente combinar grupos de widgets dentro de un &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Composite.html"&gt;composite&lt;/a&gt; que es en sí mismo un widget re-utilizable. Composite, es un widget especial que puede contener otros componentes (por lo general, un &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Panel.html"&gt;panel&lt;/a&gt;) pero se comporta como si el fuera su widget contenido. Es preferible usar Composite que intentar crear widgets complejos usando subclases de panel ya que un Composite usualmente controla de una mejor forma, qué métodos son publicados.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Desde Cero en código Java&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;También es posible crear un widget desde cero usando código en Java, aunque este método es más complicado, ya que tienes que escribirlo a bajo nivel. Muchos de los widgets básicos son escritos de ésta manera, como &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Button.html"&gt;Button&lt;/a&gt; o &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.TextBox.html"&gt;TextBox&lt;/a&gt;. De momento no hay mucha documentación acerca de cómo crear widget de esta forma, pero siempre puedes referirte a la implementación de la clase Button (por ejemplo), para entender su funcionamiento.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Usando JavaScript&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Cuando se implementa un widget personalizado que deriva directamente desde la clase &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Widget.html"&gt;Widget&lt;/a&gt;, puedes escribir algunos widgets usando JavaScript. Esto debe ser utilizado únicamente como un último recurso, además es conviene considerar las implicaciones que puedan tener los métodos que escribes sobre el tipo de navegador usado, es decir, ser cuidadoso para que tu código corra sobre cualquier navegador; y no solo eso, crear widgets con JavaScript también es más difícil de depurar. Para un ejemplo de esto, ver el widget &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.TextBox.html"&gt;TextBox&lt;/a&gt; y su implementación baja.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-5218303897454195433?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/5218303897454195433/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=5218303897454195433&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/5218303897454195433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/5218303897454195433'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/creando-widgets-personalizados.html' title='Creando Widgets personalizados'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-4367836169977968707</id><published>2007-09-11T06:28:00.000-07:00</published><updated>2007-09-17T09:27:05.770-07:00</updated><title type='text'>Events y Listeners</title><content type='html'>Los eventos en Google Web Toolkit usan interfaces listener (de escucha de eventos), de una manera muy similar a como se utilizan en otros frameworks. Una interfaz listener, define uno o más métodos que los widgets usan para anunciar un evento. Una clase que recibe eventos de un tipo en particular, implementa la interfaz listener asociada con el tipo de eventos que recibe y luego pasa una referencia del widget que generó el evento para “suscribirlo” a un conjunto de eventos.&lt;br /&gt;&lt;br /&gt;La clase &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Button.html"&gt;Button&lt;/a&gt;, por ejemplo, publica eventos click. La interfaz asociada para este tipo de eventos es &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.ClickListener.html"&gt;ClickListener&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;p class="codigo"&gt;public void ejemploDeClickListener() {&lt;br /&gt;Button b = new Button("Dame clic");&lt;br /&gt;b.addClickListener(new ClickListener() {&lt;br /&gt;  public void onClick(Widget sender) {&lt;br /&gt;    // aquí se determina que sucede cuando se hace clic&lt;br /&gt;  }&lt;br /&gt;});&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;Usar clases anónimas dentro de otras clases, puede ser ineficiente para un gran número de widgets, puesto que podría resultar en la creación de muchos objetos listener. Los widgets proveen su apuntador &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;this&lt;/span&gt; como el parámetro &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;sender&lt;/span&gt; cuando invocan un método listener, permitiendo que sea sencillo para el listener distinguir entre los diferentes publicadores. Esto hace un mejor uso de la memoria, pero requiere más lineas de código para su implementación, como en el siguiente ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;p class="codigo"&gt;public class EjemploListener extends Composite implements ClickListener {&lt;br /&gt;private FlowPanel fp = new FlowPanel();&lt;br /&gt;private Button b1 = new Button("Button 1");&lt;br /&gt;private Button b2 = new Button("Button 2");&lt;br /&gt;&lt;br /&gt;public EjemploListener() {&lt;br /&gt;  initWidget(fp);&lt;br /&gt;  fp.add(b1);&lt;br /&gt;  fp.add(b2);&lt;br /&gt;  b1.addClickListener(this);&lt;br /&gt;  b2.addClickListener(this);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void onClick(Widget sender) {&lt;br /&gt;  if (sender == b1) {&lt;br /&gt;    // handle b1 being clicked&lt;br /&gt;  } else if (sender == b2) {&lt;br /&gt;    // handle b2 being clicked&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Algunas interfaces de eventos especifican más de un evento. Si estás interesado en solo un subconjunto de eventos, puedes usar “adapters”. Los adaptadores (adapters) son implementaciones vacías de una interfaz de eventos en particular, desde que puedas derivar una clase listener sin tener que implementar todo el método:&lt;br /&gt;&lt;br /&gt;&lt;p class="codigo"&gt;public void ejemploAdapter() {&lt;br /&gt;TextBox t = new TextBox();&lt;br /&gt;t.addKeyboardListener(new KeyboardListenerAdapter() {&lt;br /&gt;  public void onKeyPress(Widget sender, char keyCode, int modifiers) {&lt;br /&gt;    // handle only this one event&lt;br /&gt;  }&lt;br /&gt;});&lt;br /&gt;}&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-4367836169977968707?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/4367836169977968707/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=4367836169977968707&amp;isPopup=true' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/4367836169977968707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/4367836169977968707'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/events-y-listeners.html' title='Events y Listeners'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-5618637579161999639</id><published>2007-09-11T06:26:00.000-07:00</published><updated>2007-09-17T09:26:32.080-07:00</updated><title type='text'>Galería de Widgets</title><content type='html'>Los siguientes son Widgets y Paneles disponibles en la librería de clases de GWT:&lt;br /&gt;&lt;br /&gt;&lt;table style="text-align: center;"&gt;&lt;tbody&gt;&lt;tr class="gallery-link"&gt;&lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Button.html"&gt;Button&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.RadioButton.html"&gt;RadioButton&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery"&gt; &lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/Button.png" /&gt;&lt;/td&gt;&lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/RadioButton.png" /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery-link"&gt; &lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.PushButton.html"&gt;PushButton&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.ToggleButton.html"&gt;ToggleButton&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery"&gt; &lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/PushButton.png" /&gt;&lt;/td&gt;&lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/ToggleButton.png" /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery-link"&gt; &lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.CheckBox.html"&gt;CheckBox&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.TextBox.html"&gt;TextBox&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery"&gt; &lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/CheckBox.png" /&gt;&lt;/td&gt;&lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/TextBox.png" /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery-link"&gt; &lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.PasswordTextBox.html"&gt;PasswordTextBox&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.TextArea.html"&gt;TextArea&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery"&gt; &lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/PasswordTextBox.png" /&gt;&lt;/td&gt;&lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/TextArea.png" /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery-link"&gt; &lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Hyperlink.html"&gt;Hyperlink&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.ListBox.html"&gt;ListBox&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery"&gt; &lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/Hyperlink.png" /&gt;&lt;/td&gt;&lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/ListBox.png" /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery-link"&gt; &lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.MenuBar.html"&gt;MenuBar&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Tree.html"&gt;Tree&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery"&gt; &lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/MenuBar.png" /&gt;&lt;/td&gt;&lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/Tree.png" /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery-link"&gt; &lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.HTMLTable.html"&gt;Table&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.TabBar.html"&gt;TabBar&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery"&gt; &lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/Table.png" /&gt;&lt;/td&gt;&lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/TabBar.png" /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery-link"&gt; &lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.DialogBox.html"&gt;DialogBox&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.PopupPanel.html"&gt;PopupPanel&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery"&gt; &lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/DialogBox.png" /&gt;&lt;/td&gt;&lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/PopupPanel.png" /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery-link"&gt; &lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.StackPanel.html"&gt;StackPanel&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.HorizontalPanel.html"&gt;HorizontalPanel&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery"&gt; &lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/StackPanel.png" /&gt;&lt;/td&gt;&lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/HorizontalPanel.png" /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery-link"&gt; &lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.VerticalPanel.html"&gt;VerticalPanel&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.FlowPanel.html"&gt;FlowPanel&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery"&gt; &lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/VerticalPanel.png" /&gt;&lt;/td&gt;&lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/FlowPanel.png" /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery-link"&gt; &lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.VerticalSplitPanel.html"&gt;VerticalSplitPanel&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.HorizontalSplitPanel.html"&gt;HorizontalSplitPanel&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery"&gt; &lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/VerticalSplitPanel.png" /&gt;&lt;/td&gt;&lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/HorizontalSplitPanel.png" /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery-link"&gt; &lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.DockPanel.html"&gt;DockPanel&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.TabPanel.html"&gt;TabPanel&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery"&gt; &lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/DockPanel.png" /&gt;&lt;/td&gt;&lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/TabPanel.png" /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery-link"&gt; &lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.RichTextArea.html"&gt;RichTextArea&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.DisclosurePanel.html"&gt;DisclosurePanel&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery"&gt; &lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/RichTextArea.png" /&gt;&lt;/td&gt;&lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/DisclosurePanel.png" /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery-link"&gt; &lt;td&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.SuggestBox.html"&gt;SuggestBox&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class="gallery"&gt; &lt;td&gt;&lt;img class="gallery" src="http://code.google.com/webtoolkit/documentation/SuggestBox.png" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;El 100% del contenido de ésta entrada fue tomado de &lt;/span&gt;&lt;a style="color: rgb(255, 0, 0);" href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.UserInterface.WidgetGallery.html"&gt;ésta web&lt;/a&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-5618637579161999639?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/5618637579161999639/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=5618637579161999639&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/5618637579161999639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/5618637579161999639'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/galera-de-widgets.html' title='Galería de Widgets'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-2769722771258283832</id><published>2007-09-11T06:17:00.000-07:00</published><updated>2007-09-17T09:25:49.519-07:00</updated><title type='text'>Widgets y paneles</title><content type='html'>En las aplicaciones de GWT se construyen interfaces de usuario usando &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Widget.html"&gt;widgets&lt;/a&gt; dentro de &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Panel.html"&gt;paneles&lt;/a&gt;. Se denominan widgets a objetos como &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Button.html"&gt;Button&lt;/a&gt; (botones), &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.TextBox.html"&gt;TextBox&lt;/a&gt; (cajas de texto) y &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Tree.html"&gt;Tree&lt;/a&gt; (árboles).&lt;br /&gt;&lt;br /&gt;Los widgets y paneles trabajan de igual manera sobre los diferentes navegadores, usándolos, eliminas la necesidad de escribir código especial para cada navegador. Aún así, no estás limitado al conjunto de widgets que vienen incluidos en este toolkit, existen varias formas de crear un widget personalizado.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Paneles&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Los paneles como &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.DockPanel.html"&gt;DockPanel&lt;/a&gt;, &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.HorizontalPanel.html"&gt;HorizontalPanel&lt;/a&gt; y &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.RootPanel.html"&gt;RootPanel&lt;/a&gt;, están diseñados para contener widgets dentro y son usados para determinar &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/entendiendo-los-layouts.html"&gt;como la interfaz de usuario va a ser distribuida&lt;/a&gt; sobre el navegador.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Estilos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Estilos visuales pueden ser aplicados a las interfaces de usuario usando Hojas de Estilo en Cascada (CSS). En &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/hojas-de-estilo.html"&gt;ésta entrada&lt;/a&gt; se describe como usar esta característica.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-2769722771258283832?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/2769722771258283832/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=2769722771258283832&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/2769722771258283832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/2769722771258283832'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/widgets-y-paneles.html' title='Widgets y paneles'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-6616846023797813888</id><published>2007-09-11T06:07:00.000-07:00</published><updated>2007-09-11T13:40:31.009-07:00</updated><title type='text'>Construyendo Interfaces de Usuario</title><content type='html'>Las clases de interfaces de usuario de Google Web Toolkit son muy similares a las de los distintos frameworks como &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/package-summary.html"&gt;Swing&lt;/a&gt; o &lt;a href="http://www.eclipse.org/swt/"&gt;SWT&lt;/a&gt;, excepto que los widgets son creados y renderizados usando HTML creado dinámicamente.&lt;br /&gt;&lt;br /&gt;Mientras sea posible manipular el &lt;a href="http://es.wikipedia.org/wiki/Document_Object_Model"&gt;DOM&lt;/a&gt; del navegador directamente usando la interfaz &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.DOM.html"&gt;DOM&lt;/a&gt;, es más fácil usar las clases desde la jerarquía de &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Widget.html"&gt;widgets&lt;/a&gt;. Raramente necesitarás usar DOM directamente. Usando widgets puedes construir interfaces de usuario rápidamente, y que se comporten de manera adecuada sobre todos lo navegadores.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Especificaciones&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/widgets-y-paneles.html"&gt;Widgets y paneles&lt;br /&gt;&lt;/a&gt;Los widgets y paneles son códigos en Java del lado del cliente usuados para construir interfaces de usuario.&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/widgets-y-paneles.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/galera-de-widgets.html"&gt;Galería de widgets&lt;br /&gt;&lt;/a&gt;En esta entrada se listan los objetos de clase para construir  interfaces de usuario&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/galera-de-widgets.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/events-y-listeners.html"&gt;Events y Listeners&lt;br /&gt;&lt;/a&gt;Los widgets pueden emitir eventos (Events) que son escuchados (Listener) por los manejadores de eventos respectivos.&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/events-y-listeners.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/creando-widgets-personalizados.html"&gt;Creando Widgets personalizados&lt;br /&gt;&lt;/a&gt;Crea tu propio widget completamente usando Java&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/creando-widgets-personalizados.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/entendiendo-los-layouts.html"&gt;Entendiendo los layouts&lt;br /&gt;&lt;/a&gt;En esta entrada se exponen los contenedires de Widgets más utilizados&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/entendiendo-los-layouts.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/hojas-de-estilo.html"&gt;Hojas de estilo&lt;br /&gt;&lt;/a&gt;Del cómo se usan las Hojas de Estilo en Cascada en Google Web Toolkit&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/hojas-de-estilo.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/atado-de-imgenes.html"&gt;Atado de imágenes (image bundle)&lt;br /&gt;&lt;/a&gt;Optimiza el funcionamiento de tu aplicación  reduciendo el número de peticiones HTTP al servidor&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-6616846023797813888?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/6616846023797813888/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=6616846023797813888&amp;isPopup=true' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/6616846023797813888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/6616846023797813888'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/construyendo-interfaces-de-usuario.html' title='Construyendo Interfaces de Usuario'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-8069269983191362467</id><published>2007-09-10T14:18:00.000-07:00</published><updated>2007-09-17T09:24:39.617-07:00</updated><title type='text'>Tipos de variables serializables</title><content type='html'>&lt;java.lang.string&gt;&lt;java.lang.string,java.lang.string&gt;&lt;java.lang.integer&gt;&lt;java.lang.string&gt;Los parámetros y variables de retorno deben ser serializables, lo cual significa que deben cumplir con ciertas restricciones. Google Web Toolkit intenta que la serialización sea lo más simple posible, así que mientras que sigas adecuadamente las reglas de serialización estimadas , en la practica el uso de las mismas se vuelve intuitivo rápidamente.&lt;br /&gt;&lt;br /&gt;Un tipo de variable puede ser serializable y usado en una interfaz de servicio si,&lt;br /&gt;&lt;/java.lang.string&gt;&lt;/java.lang.integer&gt;&lt;/java.lang.string,java.lang.string&gt;&lt;/java.lang.string&gt;&lt;ul&gt;&lt;li&gt;&lt;java.lang.string&gt;&lt;java.lang.string,java.lang.string&gt;&lt;java.lang.integer&gt;&lt;java.lang.string&gt;es primitivo, como &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;char&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;byte&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;short&lt;/span&gt;, &lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;int&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;long&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;boolean&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;float&lt;/span&gt;, o &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;double&lt;/span&gt;;&lt;/java.lang.string&gt;&lt;/java.lang.integer&gt;&lt;/java.lang.string,java.lang.string&gt;&lt;/java.lang.string&gt;&lt;/li&gt;&lt;li&gt;&lt;java.lang.string&gt;&lt;java.lang.string,java.lang.string&gt;&lt;java.lang.integer&gt;&lt;java.lang.string&gt;&lt;/java.lang.string&gt;&lt;/java.lang.integer&gt;&lt;/java.lang.string,java.lang.string&gt;&lt;/java.lang.string&gt;es &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;String&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Date&lt;/span&gt;, o una envoltura primitiva como &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Character&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Byte&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Short&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Integer&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Long&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Boolean&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Float&lt;/span&gt;, o &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Double&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;es un arreglo de variables serializables (incluyendo otros arrays serializables);&lt;/li&gt;&lt;li&gt;es una clase serializable definida por el usuario; o&lt;/li&gt;&lt;li&gt;tiene al menos una subclase serializable&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;java.lang.string&gt;&lt;java.lang.string,java.lang.string&gt;&lt;java.lang.integer&gt;&lt;java.lang.string&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Clases Serializables definidas por el usuario&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Una clase definida por el usuario es serializable si&lt;br /&gt;&lt;/java.lang.string&gt;&lt;/java.lang.integer&gt;&lt;/java.lang.string,java.lang.string&gt;&lt;/java.lang.string&gt;&lt;ol&gt;&lt;li&gt;&lt;java.lang.string&gt;&lt;java.lang.string,java.lang.string&gt;&lt;java.lang.integer&gt;&lt;java.lang.string&gt;es asignable a &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.rpc.IsSerializable.html"&gt;IsSerializable&lt;/a&gt; o &lt;a href="http://code.google.com/webtoolkit/documentation/java.io.Serializable.html"&gt;Serializable&lt;/a&gt;, ya sea porque directamente implementa una de esas interfaces o porque deriva desde una superclase de estas&lt;/java.lang.string&gt;&lt;/java.lang.integer&gt;&lt;/java.lang.string,java.lang.string&gt;&lt;/java.lang.string&gt;&lt;/li&gt;&lt;li&gt;&lt;java.lang.string&gt;&lt;java.lang.string,java.lang.string&gt;&lt;java.lang.integer&gt;&lt;java.lang.string&gt;&lt;/java.lang.string&gt;&lt;/java.lang.integer&gt;&lt;/java.lang.string,java.lang.string&gt;&lt;/java.lang.string&gt;todas las instancias de campos no &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;final&lt;/span&gt;, y no &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;transient&lt;/span&gt;  son serializables, y&lt;/li&gt;&lt;li&gt;tiene un constructor público por defecto (sin argumentos)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;java.lang.string&gt;&lt;java.lang.string,java.lang.string&gt;&lt;java.lang.integer&gt;&lt;java.lang.string&gt;&lt;br /&gt;La palabra reservada &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;transient&lt;/span&gt; es en cierto modo respetada, así que los valores en campos &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;transient&lt;/span&gt; no son intercambiados durante el RPC. Los campos que son declarados &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;final &lt;/span&gt;tampoco son intercambiados durante el RPC, así que deben generalmente ser marcados &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;transient&lt;/span&gt; también.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Polimorfismo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El RPC de Google Web Toolkit soporta parámetros y tipos de retorno polimórficos. Sin embargo, para tratar de hacer el mejor uso del polimorfismo, deberías ser tan específico como tu diseño lo permita, cuando definas interfaces de servicio. Mientras más especifico seas, permitirás al &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/el-compilador-de-google-web-tooltik.html"&gt;compilador&lt;/a&gt; hacer un mejor trabajo removiendo código innecesario cuando optimiza tu aplicación para reducir su tamaño.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tipo de Argumentos&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Las clases &lt;span style="font-weight: bold; font-style: italic;"&gt;Collection&lt;/span&gt; como &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;java.util.Set&lt;/span&gt; y &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;java.util.List&lt;/span&gt; tienen un funcionamiento especial y requiere de cuidado, ya que operan en términos de instancias de &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Object&lt;/span&gt;. Para hacer colecciones serializables, debes especificar el tipo particular de objetos que son esperados para ser contenidos. Esto requiere usar &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;@gwt.typeArgs&lt;/span&gt;, una anotación especial de &lt;a href="http://java.sun.com/j2se/javadoc/"&gt;Javadoc&lt;/a&gt;. Definir el tipo de objeto Collection significa que asegurarás que la colección solamente contendrá objetos de ese tipo. Hacer esto es necesario para que el generador de código JavaScript de Google Web Toolkit pueda crear código eficiente. Añadir un objeto a una colección que viole ésta regla hará que tu aplicación se comporte de manera indefinida.&lt;br /&gt;&lt;br /&gt;Éste es un ejemplo de lo que debes hacer, para incluir campos de tipo collection en una clase serializable:&lt;br /&gt;&lt;/java.lang.string&gt;&lt;/java.lang.integer&gt;&lt;/java.lang.string,java.lang.string&gt;&lt;/java.lang.string&gt;&lt;p class="codigo"&gt;public class MiClase implements IsSerializable {&lt;br /&gt;/**&lt;br /&gt;* Éste es un objeto Set que siempre debe contener cadenas.&lt;br /&gt;*&lt;br /&gt;* @gwt.typeArgs &lt;java.lang.string&gt;&lt;br /&gt;*/&lt;br /&gt;public Set setOfStrings;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Este es un objeto Map que debe siempre contener&lt;br /&gt;* dos cadenas String  del tipo clave - valor&lt;br /&gt;*&lt;br /&gt;* @gwt.typeArgs &lt;java.lang.string,java.lang.string&gt;&lt;br /&gt;*/&lt;br /&gt;public Map mapOfStringToString;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Constructor por defecto. Esto es requerido para una clase serializable class.&lt;br /&gt;*/&lt;br /&gt;public MiClase() {&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/java.lang.string,java.lang.string&gt;&lt;/java.lang.string&gt;&lt;/p&gt;&lt;br /&gt;Nota que no hay necesidad de especificar el nombre del objeto en la declaración &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;@gwt.typeArgs&lt;/span&gt;. De manera similar, para incluir parámetros y tipos de retorno se hace lo siguiente:&lt;br /&gt;&lt;p class="codigo"&gt;public interface MiServicio extends RemoteService {&lt;br /&gt;/**&lt;br /&gt;* La primera anotación indica que el parámetro llamado ‘c’ es un&lt;br /&gt;* objeto List que solamente contiene objetos Integer. La segunda&lt;br /&gt;* anotación indica que el objeto List retornado solamente contiene&lt;br /&gt;* objetos String (nota que no es necesario el nombre, para un valor&lt;br /&gt;* de retorno).&lt;br /&gt;*&lt;br /&gt;* @gwt.typeArgs c &amp;lt;java.lang.integer&amp;gt;&lt;br /&gt;* @gwt.typeArgs &amp;lt;java.lang.string&amp;gt;&lt;br /&gt;*/&lt;br /&gt;List reverseListAndConvertToStrings(List c);&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;Nota que la anotación de parámetros debe incluir el nombre del parámetro en cuestión, además del tipo de objeto de colección, mientras que en las anotaciones de valor de retorno no.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Un consejo&lt;/span&gt;&lt;br /&gt;&lt;p class="consejo"&gt;Aunque la terminología es muy similar, el concepto ‘serializable’ de Google Web Toolkit es diferente que la serialización basada en el estándar de la interfaz &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/io/Serializable.html"&gt;Serializable&lt;/a&gt; de Java.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-8069269983191362467?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/8069269983191362467/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=8069269983191362467&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8069269983191362467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8069269983191362467'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/tipos-de-variables-serializables.html' title='Tipos de variables serializables'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-1404261348599623471</id><published>2007-09-10T10:00:00.000-07:00</published><updated>2007-09-17T09:23:24.516-07:00</updated><title type='text'>Realizando una invocación</title><content type='html'>El proceso de realizar un RPC desde un cliente involucra siempre los mismos pasos.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Instanciar la interfaz de servicio usando &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.core.client.GWT.html#create%28java.lang.Class%29"&gt;GWT.create()&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Especificar un URL para el servicio usando &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.rpc.ServiceDefTarget.html"&gt;ServiceDefTarget&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Crear un objeto callback asíncrono para ser notificado cuando el RPC se haya completado.&lt;/li&gt;&lt;li&gt;Realizar la llamada/invocación.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Ejemplo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Supón que quieres llamar un método sobre una interfaz de servicio definida así:&lt;br /&gt;&lt;p class="codigo"&gt;public interface MiServicioEmail extends RemoteService {&lt;br /&gt;void BandejaEntrada(String nombreUsuario, String password);&lt;br /&gt;}&lt;/p&gt;&lt;br /&gt;Y su correspondiente interfaz asíncrona se ve algo así:&lt;br /&gt;&lt;p class="codigo"&gt;public interface MiServicioEmailAsync {&lt;br /&gt;void BandejaEntrada (String nombreUsuario, String password,&lt;br /&gt;   AsyncCallback callback);&lt;br /&gt;}&lt;/p&gt;&lt;br /&gt;La llamada/invocación desde el &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/cdigo-del-lado-del-cliente-client-side.html"&gt;lado del cliente&lt;/a&gt; tendría que verse así:&lt;br /&gt;&lt;p class="codigo"&gt;public void menuCommandBandejaEntrada() {&lt;br /&gt;// (1) Crear el proxy del cliente. Nota que aunque creas la&lt;br /&gt;// interfaz de servicio adecuada, repartes el resultado la versión&lt;br /&gt;// asíncrona de la interfaz. El reparto es siempre seguro ya que&lt;br /&gt;// el proxy generado implementa la interfaz asíncrona automáticamente&lt;br /&gt;//&lt;br /&gt;MiServicioEmailAsync servicioEmail = (MiServicioEmailAsync) GWT.create(MiServicioEmail.class);&lt;br /&gt;&lt;br /&gt;// (2) Especificar la URL que nuestra implementación de&lt;br /&gt;// servicio está corriendo.&lt;br /&gt;// Nota que la URL debe residir sobre el mismo dominio y puerto&lt;br /&gt;// desde la que la página fue servida.&lt;br /&gt;//&lt;br /&gt;ServiceDefTarget endpoint = (ServiceDefTarget) servicioEmail;&lt;br /&gt;String URLmodulo = GWT.getModuleBaseURL() + "email";&lt;br /&gt;endpoint.setServiceEntryPoint(URLmodulo);&lt;br /&gt;&lt;br /&gt;// (3) Crear un objeto callback asíncrono para manejar el resultado.&lt;br /&gt;//&lt;br /&gt;AsyncCallback callback = new AsyncCallback() {&lt;br /&gt; public void onSuccess(Object result) {&lt;br /&gt;   // realizar los procesos que sean necesarios&lt;br /&gt;   // por ejemplo actualizar la interfaz de usuario&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void onFailure(Throwable caught) {&lt;br /&gt;   // realizar los procesos necesarios si falló la operación&lt;br /&gt; }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// (4) Realizar la llamada. El control de flujo continuará&lt;br /&gt;// inmediatamente y luego 'callback' será invocado cuando&lt;br /&gt;// el RPC se haya completado.&lt;br /&gt;//&lt;br /&gt;servicioEmail.BandejaEntrada(vNombreUsuario, vPassword, callback);&lt;br /&gt;}&lt;/p&gt;&lt;br /&gt;Es seguro guardar en caché los servicios instanciados, para evitar crearlos en posibles llamadas/invocaciones subsecuentes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Entradas relacionadas&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.rpc.RemoteService.html"&gt;RemoteService&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.rpc.ServiceDefTarget.html"&gt;ServiceDefTarget&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.core.client.GWT.html#create%28java.lang.Class%29"&gt;GWT.create(Class)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-1404261348599623471?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/1404261348599623471/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=1404261348599623471&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/1404261348599623471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/1404261348599623471'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/realizando-una-invocacin.html' title='Realizando una invocación'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-7435554108902736642</id><published>2007-09-10T09:51:00.000-07:00</published><updated>2007-09-17T09:22:43.295-07:00</updated><title type='text'>Implementando servicios</title><content type='html'>Cada servicio finalmente necesita realizar algunos procesos con el fin de responder peticiones a los clientes. Cada proceso del &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/cdigo-del-lado-del-servidor-server-side.html"&gt;lado del servidor&lt;/a&gt; ocurre en la implementación del servicio, que está basada en la conocida arquitectura de los &lt;a href="http://java.sun.com/products/servlet/"&gt;servlets&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Una implementación de servicio debe heredar de &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.server.rpc.RemoteServiceServlet.html"&gt;RemoteServiceServlet&lt;/a&gt; y debe implementar la interfaz de servicio asociada. Puedes notar que la implementación del servicio no implementa la versión asíncrona de la interfaz de servicio.&lt;br /&gt;&lt;br /&gt;Cada implementación de servicio es finalmente un servlet, pero en vez de heredar de &lt;a href="http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpServlet.html"&gt;HttpServlet&lt;/a&gt;, hereda de &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.server.rpc.RemoteServiceServlet.html"&gt;RemoteServiceServlet&lt;/a&gt;. RemoteServiceServlet maneja automáticamente la serialización e invoca el método requerido en tu implementación de servicio.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Testeando servicios durante el Desarrollo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para cargar automáticamente tu implementación de servicio, usa la etiqueta &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;&lt;servlet&gt;&lt;/servlet&gt;&lt;/span&gt; dentro de tu &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/formato-de-mdulo-xml.html"&gt;modulo XML&lt;/a&gt;. El shell de desarrollo de Google WebToolkit incluye una versión incrustada de &lt;a href="http://casidiablo.blogspot.com/2006/12/el-servidor-apache-tomcat.html"&gt;Tomcat&lt;/a&gt; que actúa como un contenedor de servlets en tiempo de desarrollo para pruebas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Servicios en Producción&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;En producción, puedes usar cualquier &lt;a href="http://jungla.dit.upm.es/%7Esantiago/externos/docencia/doctorado/drci/apuntes/servlets-jsp/sld015.htm"&gt;contenedor de servlets&lt;/a&gt; que sea apropiado para tu aplicación. Solamente necesitas asegurarte que el código del cliente está configurado para invocar el servicio usando la URL para la cual tu servlet es mapeado por la configuración de &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;web.xml&lt;/span&gt;. Ver &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.rpc.ServiceDefTarget.html"&gt;ServiceDefTarget&lt;/a&gt; para más información.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-7435554108902736642?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/7435554108902736642/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=7435554108902736642&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/7435554108902736642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/7435554108902736642'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/implementando-servicios.html' title='Implementando servicios'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-3996734771151124388</id><published>2007-09-10T09:37:00.000-07:00</published><updated>2007-09-17T09:21:10.415-07:00</updated><title type='text'>Creando servicios</title><content type='html'>Para desarrollar una nueva interfaz de servicio, comienza por crear una interfaz que herede de &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.rpc.RemoteService.html"&gt;RemoteService&lt;/a&gt;.&lt;p class="codigo"&gt;public interface MiServicio extends RemoteService {&lt;br /&gt;public String miMetodo(String s);&lt;br /&gt;}&lt;/p&gt;Ésta interfaz &lt;span style="font-weight: bold;"&gt;síncrona &lt;/span&gt;es la versión definitiva de la declaración de tus servicios. Cualquier implementación de este servicio en el lado del servidor debe heredar a &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.server.rpc.RemoteServiceServlet.html"&gt;RemoteServiceServlet&lt;/a&gt; e implementar ésta interfaz de servicio.&lt;p class="codigo"&gt;public class ImplMiServicio extends RemoteServiceServlet implements&lt;br /&gt;MiServicio {&lt;br /&gt;&lt;br /&gt;public String miMetodo(String s) {&lt;br /&gt;// Las cosas a realizar en el servidor.&lt;br /&gt;return s;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;/p&gt;&lt;span style="font-weight: bold;"&gt;Interfaces Asíncronas&lt;/span&gt;&lt;br /&gt;Antes de que puedas intentar realizar una invocación remota desde el cliente, debes crear otra interfaz, una asíncrona, basada en tu interfaz de servicio original. Continuando con el ejemplo de arriba sería algo así...&lt;p class="codigo"&gt;interface MiServicioAsync {&lt;br /&gt;public void miMetodo(String s, AsyncCallback callback);&lt;br /&gt;}&lt;/p&gt;La naturaleza de la invocación de métodos asíncronos requiere que &lt;span style="font-style: italic;"&gt;quien realice la invocación&lt;/span&gt; pase un objeto callback que pueda ser notificado cuando la llamada asíncrona esté completa, ya que &lt;span style="font-style: italic;"&gt;quien realice la invocación&lt;/span&gt; no puede ser bloqueado hasta que la llamada esté completa. Por la misma razón, los métodos asíncronos no tienen tipo de retorno; siempre deben retornar &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;void&lt;/span&gt;. Después que una llamada asíncrona es hecha, la información de retorno a &lt;span style="font-style: italic;"&gt;quien hizo la invocación&lt;/span&gt; es hecha a través de un objeto callback.&lt;br /&gt;&lt;br /&gt;La relación entre un servicio y su contraparte asíncrona es sencilla:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Si una interfaz de servicio es llamada &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;com.ejemplo.cal.client.SpellingService&lt;/span&gt;, entonces la interfaz asíncrona debe ser llamada &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;com.ejemplo.cal.client.SpellingServiceAsync&lt;/span&gt;. La interfaz asíncrona debe estar en el mismo paquete y tener el mismo nombre, pero con el sufijo &lt;span style="font-weight: bold;"&gt;Async&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Para cada método en tu interfaz de servicio,&lt;p class="codigo"&gt;public TipoRetorno metodoNombre(TipoParametro param1, TipoParametro param2);&lt;/p&gt;un método asíncrono debe ser definido de la siguiente manera:&lt;p class="codigo"&gt;public void metodoNombre (TipoParametro param1, TipoParametro param2, AsyncCallback callback);&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;Ver &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.rpc.AsyncCallback.html"&gt;AsyncCallback&lt;/a&gt; para detalles adicionales sobre cómo implementar un objeto callback asíncrono.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-3996734771151124388?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/3996734771151124388/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=3996734771151124388&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/3996734771151124388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/3996734771151124388'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/creando-servicios.html' title='Creando servicios'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-9185742524532899838</id><published>2007-09-10T09:33:00.000-07:00</published><updated>2007-09-17T09:20:36.581-07:00</updated><title type='text'>Anatomía de RPC</title><content type='html'>En ésta sección se esbozan las partes básicas requeridas para invocar un servicio. Cada servicio tiene una pequeña familia de interfaces y clases. Algunas de esas clases, como el servicio Proxy, son generados automáticamente y generalmente nunca te percatarás de que existen. El patrón de clases es idéntico para todos los servicios que implementas, por lo que es una buena idea familiarizarse un poco con los términos y el propósito de cada capa, en el procesamiento de llamadas al servidor. Si estás familiarizado con el mecanismo tradicional de RPC, probablemente ya conocerás la mayoría de la terminología aquí expuesta.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://code.google.com/webtoolkit/documentation/AnatomyOfServices.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 640px;" src="http://code.google.com/webtoolkit/documentation/AnatomyOfServices.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;El gráfico fue tomado de la página oficial de Google Web Toolkit.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-9185742524532899838?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/9185742524532899838/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=9185742524532899838&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/9185742524532899838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/9185742524532899838'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/anatoma-de-rpc.html' title='Anatomía de RPC'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-8369915184022240771</id><published>2007-09-10T09:24:00.000-07:00</published><updated>2007-09-17T09:16:46.463-07:00</updated><title type='text'>RPC: Invocación de procedimientos remotos</title><content type='html'>El concepto de RPC es muy similar al &lt;a href="http://casidiablo.net/wordpress/index.php/2007/01/14/rmi-%C3%82%C2%BFque-es-un-ejemplo-sencillo-con-rmi"&gt;RMI&lt;/a&gt;. Una diferencia fundamental entre Google Web Toolkit y las tradicionales aplicaciones web, es que las aplicaciones Google Web Toolkit no necesitan de otras páginas web mientras son ejecutadas. Ya que las páginas construidas con Google Web Toolkit corren como aplicaciones sobre el navegador, éstas no necesitan hacer nuevas peticiones al servidor para, por ejemplo,  realizar actualizaciones en la interfaz de usuario. Sin embargo, como todas las aplicaciones cliente/servidor, los programas en Google Web Toolkit necesitarán pedir ciertos datos al servidor para realizar determinadas tareas. El mecanismo para interactuar con el servidor a través de la red es llamado “remote procedure call” (RPC), que viene siendo en español “llamada a procedimiento remoto”. El RPC en Google Web Toolkit permite fácilmente al cliente enviar y recibir objetos de Java sobre &lt;a href="http://es.wikipedia.org/wiki/Hypertext_Transfer_Protocol"&gt;HTTP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Cuando es usado adecuadamente, RPC te da la oportunidad de mover toda la lógica de la interfaz de usuario al cliente, lo que mejora el funcionamiento de la aplicación, reduce el ancho de banda usado, reduce la carga al servidor, y le presenta al usuario final una experiencia más agradable navegando por la página.&lt;br /&gt;&lt;br /&gt;El código del lado del servidor que es invocado desde el cliente es frecuentemente llamado “servicio”, por lo que el “llamar procedimientos remotos” es comúnmente llamado como invocación de servicios. Aunque es necesario tener claro que el término “servicio” en este contexto NO tiene el mismo concepto de “web-service”. En realidad, los servicios Google Web Toolkit no son lo mismo que “Simple Object Access Protocol” (&lt;a href="http://es.wikipedia.org/wiki/SOAP"&gt;SOAP&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Aquí tienes más información acerca del uso de RPC:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/anatoma-de-rpc.html"&gt;La anatomía de RPC en Google Web Toolkit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/creando-servicios.html"&gt;Creación de servicios&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/implementando-servicios.html"&gt;Implementación de servicios&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/realizando-una-invocacin.html"&gt;Realizando invocaciones a servicios&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-8369915184022240771?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/8369915184022240771/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=8369915184022240771&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8369915184022240771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8369915184022240771'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/rpc-invocacin-de-procedimientos-remotos.html' title='RPC: Invocación de procedimientos remotos'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-5836331466467325207</id><published>2007-09-07T12:38:00.000-07:00</published><updated>2007-09-10T09:42:07.630-07:00</updated><title type='text'>Instalación de Google Web Toolkit</title><content type='html'>Lo primero es descargar el archivo adecuado de acuerdo al sistema operativo que uses:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/webtoolkit/download.html"&gt;http://code.google.com/webtoolkit/download.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Instalación sobre Windows&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Luego de descargar la versión de GWT para Windows, descomprime del archivo y añade su ruta en el path de tu sistema operativo. Para ello, das clic derecho en "Mi Pc" -&gt; Propiedades -&gt; Variables de entorno, y en &lt;span style="font-style: italic;"&gt;Variables del sistema&lt;/span&gt; le das doble clic a Path, ya añades la ruta donde descomprimiste el GWT, así:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://img520.imageshack.us/img520/4291/vegwtmy4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://img520.imageshack.us/img520/4291/vegwtmy4.png" alt="" id="BLOGGER_PHOTO_ID_5107539375019801714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ten cuidado de no borrar las rutas ya presentes, ya que esto puede volver inestable tu sistema. También recuerda que las rutas son separadas con punto y coma (;), tal como se vé en la imagen.&lt;br /&gt;&lt;br /&gt;Esto se hace para tu comodidad a la hora  de desarrollar, ya que de esta manera no es necesario que te situes en el path de instalación, desde la línea de comandos, para ejecutarlos &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/herramientas-de-la-lnea-de-comandos.html"&gt;comandos más comunes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Instalación sobre sistemas operativos GNU/Linux&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Luego de descargar el archivo correspiente para GNU/Linux, lo descomprimes con tu gestor de archivos comprimidos preferido, así:&lt;p class="consola"&gt;tar xvzf gwt-linux-1.4.60.tar.bz2&lt;/p&gt;Luego es necesario añadir la ruta donde descomprimiste los archivos al PATH de tu sistema. Para ello debemos editar el archivo &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;.bashrc&lt;/span&gt; de tu sesión:&lt;p class="consola"&gt;echo "#Path GWT" &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;echo "PATH=$PATH:/ruta/gwt" &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;echo "export PATH" &amp;gt;&amp;gt; ~/.bashrc&lt;br /&gt;source ~/.bashrc&lt;/p&gt;Hacemos esto para añadir la ruta donde se encuentra GWT a la variable de entorno PATH de tu sistema, con lo que podremos ejecutar los programas desde la &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/herramientas-de-la-lnea-de-comandos.html"&gt;línea de comandos&lt;/a&gt;, sin necesidad de situar la misma sobre la ruta del GWT.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-5836331466467325207?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/5836331466467325207/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=5836331466467325207&amp;isPopup=true' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/5836331466467325207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/5836331466467325207'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/instalacin-de-google-web-toolkit.html' title='Instalación de Google Web Toolkit'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-3477226753933724093</id><published>2007-09-06T10:27:00.000-07:00</published><updated>2007-09-06T15:05:10.837-07:00</updated><title type='text'>La arquitectura de Google Web Toolkit</title><content type='html'>GWT tiene cuatro componentes principales: un compilador Java-a-JavaScript, un navegador web "hosted", y dos librerías de clases:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Vfej1QU7bQI/RuBASyxgPGI/AAAAAAAAABc/jzq0_n1BT4k/s1600-h/estructura.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_Vfej1QU7bQI/RuBASyxgPGI/AAAAAAAAABc/jzq0_n1BT4k/s400/estructura.png" alt="" id="BLOGGER_PHOTO_ID_5107152669049371746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Los componentes son:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Compilador GWT Java-a-JavaScript&lt;/span&gt;&lt;br /&gt;El Compilador GWT Java-a-JavaScript traduce del lenguaje de programación Java a &lt;a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm"&gt;JavaScript&lt;/a&gt;. El compilador se utiliza cuando necesites correr tu aplicación en &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/desarrollo-en-modo-web.html"&gt;modo web&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Navegador web “Hosted” de GWT&lt;/span&gt;&lt;br /&gt;El Navegador web “Hosted” de GWT te permite correr y ejecutar GWT aplicaciones en &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/depuracin-en-modo-hosted.html"&gt;modo hosted&lt;/a&gt;, donde lo que estás corriendo son bytecodes de Java sobre una máquina virtual sin compilarlos a JavaScript. Para lograr esto, el navegador GWT incrusta un controlador de browser especial (un control del Internet Explorer sobre Windows o un control de &lt;a href="http://developer.mozilla.org/en/docs/Gecko_DOM_Reference"&gt;Gecko/Mozilla&lt;/a&gt; sobre Linux) con hooks dentro de la máquina virtual de Java.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Emulación de librerías JRE&lt;/span&gt;&lt;br /&gt;GWT contiene implementaciones en JavaScript de las librerías de clases más usadas en Java, incluyendo la mayoría de las clases del paquete &lt;a href="http://code.google.com/webtoolkit/documentation/java.lang.html"&gt;java.lang&lt;/a&gt; y un subconjunto de clases del paquete &lt;a href="http://code.google.com/webtoolkit/documentation/java.util.html"&gt;java.util&lt;/a&gt;. El resto del estándar de librerías de Java no es soportado nativamente con GWT. Por ejemplo, las clases de los paquetes como java.io no se utilizan en aplicaciones web ya que estas acceden a recursos en la red y al sistema de archivos local.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Librería de clases de interfaz de usuario de GWT&lt;/span&gt;&lt;br /&gt;Las librerías de clases de interfaz de usuario de GWT son un conjunto de interfaces y clases personalizadas que te permiten crear "widgets" para el navegador, como botones, cajas de texto, imágenes, y texto. Éste es el núcleo de las librerías de interfaz de usuario para crear aplicaciones GWT.&lt;/li&gt;&lt;/ul&gt;Si tienes curiosidad de entender el código de GWT, por favor siéntete libre &lt;a href="http://code.google.com/p/google-web-toolkit/"&gt;de ver esto&lt;/a&gt;. El código fuente de GWT está disponible bajo la &lt;a href="http://code.google.com/webtoolkit/terms.html"&gt;licencia Apache 2.0&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-3477226753933724093?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/3477226753933724093/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=3477226753933724093&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/3477226753933724093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/3477226753933724093'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/la-arquitectura-de-google-web-toolkit.html' title='La arquitectura de Google Web Toolkit'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_Vfej1QU7bQI/RuBASyxgPGI/AAAAAAAAABc/jzq0_n1BT4k/s72-c/estructura.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-4839386797776012029</id><published>2007-09-06T10:19:00.000-07:00</published><updated>2007-09-06T15:02:28.469-07:00</updated><title type='text'>Depuración y desarrollo de aplicaciones en GWT</title><content type='html'>Las aplicaciones GWT pueden ser ejecutadas en dos modos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Modo hosted (hosted mode) &lt;/span&gt;– En modo hosted, tu aplicación corre como bytecodes de Java sobre una máquina virtual. Por lo general gastarás más tiempo desarrollando en modo hosted, ya que allí cuentas con todas las ventajas que te proporciona Java  para depurar usando un IDE como &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Modo Web (Web mode) &lt;/span&gt;– En mode web, tu aplicación corre como HTML + JavaScript sobre un navegador, traducido desde tú código fuente Java original con el compilador de GWT (Java-to-JavaScript compiler). Cuando tu aplicación está terminada, lo único que debes hacer es subirla a un servidor web, y los usuarios finales accederán a ella a través de un navegador en “modo web”.&lt;/li&gt;&lt;/ul&gt;Para soportar el modo hosted, GWT cuenta con un navegador especial que está “enganchado” a la máquina virtual de Java. Ver el &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/la-arquitectura-de-google-web-toolkit.html"&gt;diagrama de arquitectura GWT&lt;/a&gt; para más información.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-4839386797776012029?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/4839386797776012029/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=4839386797776012029&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/4839386797776012029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/4839386797776012029'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/depuracin-y-desarrollo-de-aplicaciones.html' title='Depuración y desarrollo de aplicaciones en GWT'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-2315313072856161167</id><published>2007-09-06T09:54:00.000-07:00</published><updated>2007-09-06T15:01:23.697-07:00</updated><title type='text'>Usando Google Web Toolkit</title><content type='html'>En GWT puedes usar componentes de interfaz de usuario llamados &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Widget.html"&gt;Widgets&lt;/a&gt;, para construir aplicaciones &lt;a href="http://es.wikipedia.org/wiki/AJAX"&gt;AJAX&lt;/a&gt; con GUIs atractivas. Al igual que en la mayoría de los lenguajes de programación, los componentes de la UI son agrupados en &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Panel.html"&gt;paneles &lt;/a&gt;que determinan la ubicación de los mismos. A continuación veamos una completa aplicación que utiliza un botón y un manejador de eventos:&lt;p class="codigo"&gt;&lt;span style="font-family:courier new;"&gt;public class Hola implements EntryPoint {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  public void onModuleLoad() {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Button b = new Button("Chuzame", new ClickListener() {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      public void onClick(Widget sender) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        Window.alert("Hola, geek");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    });&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    RootPanel.get().add(b);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/p&gt;&lt;/span&gt;GWT soporta una gran cantidad de widgets que son útiles en el desarrollos de aplicaciones AJAX, incluyendo &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Tree.html"&gt;árboles&lt;/a&gt;, &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.TabBar.html"&gt;pestañas&lt;/a&gt;, &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.MenuBar.html"&gt;barras de menú&lt;/a&gt; y &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.DialogBox.html"&gt;menús de dialogo&lt;/a&gt;. GWT también soporta invocación de métodos remotos (RPC) y otras características. Ver la &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/caractersticas-de-google-web-toolkit.html"&gt;lista de características&lt;/a&gt; para más información.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-2315313072856161167?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/2315313072856161167/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=2315313072856161167&amp;isPopup=true' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/2315313072856161167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/2315313072856161167'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/usando-google-web-toolkit.html' title='Usando Google Web Toolkit'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-8817649086289411300</id><published>2007-09-06T09:50:00.000-07:00</published><updated>2007-09-06T14:59:47.117-07:00</updated><title type='text'>¿Porqué traducir código Java a JavaScript?</title><content type='html'>La &lt;a href="http://casidiablo.net/wordpress/index.php/2007/01/12/acerca-de-java/"&gt;tecnología Java&lt;/a&gt; ofrece una plataforma de desarrollo productiva, y con GWT, se puede convertir en una plataforma sólida para el desarrollo de tus aplicaciones AJAX. Aquí están algunos de los beneficios de desarrollar con GWT:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Puedes usar cualquiera de tus &lt;a href="http://casidiablo.net/wordpress/index.php/2006/09/14/compiladores-e-ide%C3%A2%C2%80%C2%99s/"&gt;IDEs&lt;/a&gt; favoritos (Eclipse, IntelliJ, JProfiler, JUnit).&lt;/li&gt;&lt;li&gt;Los errores comunes en JavaScript (errores de sintaxis, por ejemplo) son fácilmente detectados mientras desarrollas la aplicación, y no cuando el usuario final lo esté ejecutando.&lt;/li&gt;&lt;li&gt;El “refactoring” automático en &lt;a href="http://casidiablo.net/wordpress/index.php/2007/01/12/acerca-de-java/"&gt;Java&lt;/a&gt; está muy de moda en estos días.&lt;/li&gt;&lt;li&gt;Los diseños en Java basados en la programación orientada a objetos es fácil de comunicar y entender, por ende hace la base de tu código &lt;a href="http://es.wikipedia.org/wiki/AJAX"&gt;AJAX&lt;/a&gt; más comprensible con menos documentación&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-8817649086289411300?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/8817649086289411300/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=8817649086289411300&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8817649086289411300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8817649086289411300'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/porqu-traducir-cdigo-java-javascript.html' title='¿Porqué traducir código Java a JavaScript?'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-1471770853224076128</id><published>2007-09-06T09:31:00.000-07:00</published><updated>2007-09-18T10:00:04.419-07:00</updated><title type='text'>Características de Google Web Toolkit</title><content type='html'>&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.UserInterface.html"&gt;&lt;span style="font-weight: bold;"&gt;Componentes de la interfaz de usuario dinámicos y re-utilizables&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Crea un Widget para construir otros. Coloca los Widgets automáticamente en Paneles. Envía tus Widget a otros desarrolladores en archivos JAR.&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.html"&gt;RPC realmente fácil&lt;/a&gt;&lt;br /&gt;Para comunicarte desde el navegador que lanza tu aplicación con tu servidor web, solamente necesitas definir clases de Java serializables para las peticiones y respuestas. En producción, GWT serializa automáticamente las peticiones del navegador y de-serializa las repuestas desde el servidor web. El mecanismo de RPC de GWT puede incluso manejar jerarquía de polimorfismo en clases, y puedes manejar las posibles excepciones.&lt;br /&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.History.html"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Administración del historial del navegador&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Las aplicaciones en AJAX no necesitan utilizar el botón “atrás” (back) del navegador. Y GWT no es la excepción, es decir, no es necesario que llames a otras páginas para realizar las diferentes acciones, ni recargar el navegador ni nada.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.Fundamentals.HostedMode.html"&gt;&lt;span style="font-weight: bold;"&gt;Depuración en tiempo real&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Para cuando tu aplicación esté lista, el código de la misma es traducido a JavaScript, pero mientras lo estás desarrollando este corre sobre una Java virtual machina (JVM). Lo que significa que en la fase de Desarrollo tienes la posibilidad de depurar tu aplicación con los avanzados sistemas de debugging y manipulación de excepciones incluidos en IDEs como Eclipse.&lt;br /&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.Fundamentals.WebMode.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/desarrollo-en-modo-web.html"&gt;&lt;span style="font-weight: bold;"&gt;Compatibilidad con los navegadores&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Tus aplicaciones en GWT serán automáticamente soportadas por navegadores como FireFox, Internet Explorer, Mozilla, Safari, y Opera sin ningún tipo de operación para la detección de los mismos, en la mayoría de los casos.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.JUnitIntegration.html"&gt;&lt;span style="font-weight: bold;"&gt;Integración con Junit&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Mediante la integración de JUnit en GWT tu puedes probar tus aplicaciones y depurarlas en un navegador mientras las construyes...incluso, puedes testear llamadas asíncronas a procedimientos remotos RPC.&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.Internationalization.html"&gt;Internacionalización&lt;/a&gt;&lt;br /&gt;Crea aplicaciones y librerías de Internacionalización rápida y fácilmente.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.JavaScriptNativeInterface.html"&gt;&lt;span style="font-weight: bold;"&gt;Interoperability and fine-grained control&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Si las librerías de clases de GWT no son suficientes para lo que necesitas, puedes mezclar JavaScript en el código de tu aplicación usando la interfaz nativa de scripts de Java (JavaScript Native Interface, JSNI).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/google-web-toolkit/"&gt;&lt;span style="font-weight: bold;"&gt;GWT es un proyecto de código abierto&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Todo el código de GWT está disponible bajo la licencia Apache 2.0. Si estás interesado en contribuir, por favor visita &lt;a href="http://code.google.com/webtoolkit/makinggwtbetter.html"&gt;esta pagina&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Si necesitas una guía de instalación y uso paso-a-paso, puedes visitar &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/comenzando-en-google-web-toolkit.html"&gt;ésta entrada&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-1471770853224076128?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/1471770853224076128/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=1471770853224076128&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/1471770853224076128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/1471770853224076128'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/caractersticas-de-google-web-toolkit.html' title='Características de Google Web Toolkit'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-5623358656457815208</id><published>2007-09-06T09:06:00.000-07:00</published><updated>2007-09-06T14:54:36.065-07:00</updated><title type='text'>¿Qué es Google Web Toolkit?</title><content type='html'>Google Web Toolkit (GWT) es un framework de desarrollo en &lt;a href="http://casidiablo.net/wordpress/index.php/2007/01/12/acerca-de-java/"&gt;Java&lt;/a&gt; de código abierto, que te permite escapar de la “matriz” de tecnologías usadas actualmente para escribir aplicaciones &lt;a href="http://es.wikipedia.org/wiki/AJAX"&gt;AJAX&lt;/a&gt;, las cuales son difíciles de manejar y propensas a errores. Con GWT, puedes desarrollar y depurar aplicaciones AJAX usando el lenguaje de programación Java en el entorno de desarrollo  de tu preferencia (me refiero al sistema operativo y a los &lt;a href="http://casidiablo.net/wordpress/index.php/2006/09/14/compiladores-e-ide%C3%A2%C2%80%C2%99s/"&gt;IDEs&lt;/a&gt;). Cuando haz acabado tu aplicación (que la has escrito en Java), GWT compila y traduce dicho programa a &lt;a href="http://es.wikipedia.org/wiki/JavaScript"&gt;JavaScript&lt;/a&gt; y &lt;a href="http://es.wikipedia.org/wiki/HTML"&gt;HTML&lt;/a&gt; compatible con cualquier navegador web.&lt;br /&gt;&lt;br /&gt;Éste es el ciclo de Desarrollo de GWT:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Usa tu &lt;a href="http://casidiablo.net/wordpress/index.php/2006/09/14/compiladores-e-ide%C3%A2%C2%80%C2%99s/"&gt;entorno de desarrollo integrado&lt;/a&gt; (IDE) favorito para escribir y depurar una aplicación en Java, usando las librerías GWT que necesites.&lt;/li&gt;&lt;li&gt;Usa el compilador de Java a JavaScript de GWT para transformar tu aplicación en un conjunto de archive JavaScript y HTML que puedes colgar en cualquier servidor y ejecutar desde un navegador web.&lt;/li&gt;&lt;li&gt;Verifica que tus aplicaciones trabajan sobre todos y cada uno de los navegadores que consideres que tus clientes usarán.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-5623358656457815208?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/5623358656457815208/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=5623358656457815208&amp;isPopup=true' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/5623358656457815208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/5623358656457815208'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/qu-es-google-web-toolkit.html' title='¿Qué es Google Web Toolkit?'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-684337728255028665</id><published>2007-09-06T08:29:00.001-07:00</published><updated>2007-09-06T14:45:37.347-07:00</updated><title type='text'>benchmarkViewer</title><content type='html'>Lee un reporte benchmark desde una carpeta y muestra sus resultados, incluyendo varias visualizaciones.&lt;br /&gt;&lt;p class="consola"&gt;&lt;span style="font-family:courier new;"&gt;benchmarkViewer [path]&lt;/p&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;path&lt;/span&gt;    Especifica la ruta del archivo XML de reportes benchmark. Si no se especifica un path intentará buscar en la ruta actual.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ejemplo&lt;/span&gt;&lt;br /&gt;&lt;p class="consola"&gt;~/MiProyecto&gt; benchmarkViewer mi/benchmark/resultados&lt;/p&gt;Con esto se mostrarán los resultados que se encuentre en el archive de reportes de la carpeta mi/benchmark/resultados.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-684337728255028665?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/684337728255028665/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=684337728255028665&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/684337728255028665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/684337728255028665'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/benchmarkviewer.html' title='benchmarkViewer'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-8443782335677913616</id><published>2007-09-06T08:14:00.000-07:00</published><updated>2007-09-06T14:43:00.460-07:00</updated><title type='text'>i18nCreator</title><content type='html'>Genera scripts de &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.Internationalization.html"&gt;internacionalización&lt;/a&gt; para &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.Internationalization.StaticStringInternationalization.html"&gt;internacionalización estática&lt;/a&gt;, usando &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.Internationalization.PropertiesFiles.html"&gt;archivos de propiedades&lt;/a&gt; de Java como ejemplo.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;p class="consola"&gt;i18nCreator [-eclipse projectName] [-out dir] [-overwrite] [-ignore] [-createMessages] interfaceName&lt;/p&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-eclipse &lt;/span&gt;   Crea un archivo de depuración para el proyecto eclipse citado&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-out&lt;/span&gt; El directorio donde se escribirán los archivos de salida&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-overwrite&lt;/span&gt; Sobrescribe archivos existentes&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-ignore&lt;/span&gt; Ignora cualquier archive existente; no sobrescribe&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;className&lt;/span&gt; El nombre completo de la clase a crear&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-createMessages&lt;/span&gt;    Genera scripts para una interfaz de “Messages” en vez de un “Constants”&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;interfaceName&lt;/span&gt;     El nombre completo de la interfaz creada&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ejemplo&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;p class="consola"&gt;~/MiProyecto&gt; i18nCreator -eclipse MiProyecto -createMessages com.example.miproyecto.client.MiProyectoMessages&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Created file src/com/example/miproyecto/client/MiProyectoMessages.properties&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Created file MiProyectoMessages-i18n.launch&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Created file MiProyectoMessages-i18n&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; ~/MiProyecto&gt; i18nCreator -eclipse MiProyecto com.example.miproyecto.client.MiProyectoConstants&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Created file src/com/example/miproyecto/client/MiProyectoConstants.properties&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Created file MiProyectoConstants-i18n.launch&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Created file MiProyectoConstants-i18n&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-8443782335677913616?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/8443782335677913616/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=8443782335677913616&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8443782335677913616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8443782335677913616'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/i18ncreator.html' title='i18nCreator'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-7074476584019805370</id><published>2007-09-06T08:12:00.000-07:00</published><updated>2007-09-06T14:43:38.687-07:00</updated><title type='text'>junitCreator</title><content type='html'>Genera un &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.JUnitIntegration.html"&gt;test JUnit&lt;/a&gt; y scripts para probar la aplicación en &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/depuracin-en-modo-hosted.html"&gt;modo hosted&lt;/a&gt; y en &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/desarrollo-en-modo-web.html"&gt;modo web&lt;/a&gt;.&lt;br /&gt;&lt;p class="consola"&gt;&lt;span style="font-family:courier new;"&gt;junitCreator -junit pathToJUnitJar [-eclipse projectName] [-out dir] [-overwrite] [-ignore] className&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-junit &lt;/span&gt;   Especifica el path a tu junit.jar (requerido)&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-module&lt;/span&gt;    Especifica el nombre del módulo de la aplicación a usar (requerido)&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-eclipse&lt;/span&gt;    Crea un archivo de depuración para el proyecto eclipse citado&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-out&lt;/span&gt; El directorio donde se escribirán los archivos de salida&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-overwrite &lt;/span&gt;Sobrescribe archivos existentes&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-ignore&lt;/span&gt; Ignora cualquier archive existente; no sobrescribe&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;className&lt;/span&gt; El nombre completo de la clase a crear&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ejemplo&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;p class="consola"&gt;~/MiProyecto&gt; junitCreator -junit /opt/eclipse/plugins/org.junit_3.8.1/junit.jar&lt;/p&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        -module com.example.miproyecto.MiProyecto&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        -eclipse MiProyecto com.example.miproyecto.client.MiProyectoTest&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Created directory test/com/example/miproyecto/test&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Created file test/com/example/miproyecto/client/MiProyectoTest.java&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Created file MiProyectoTest-hosted.launch&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Created file MiProyectoTest-web.launch&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Created file MiProyectoTest-hosted&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Created file MiProyectoTest-web&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;br /&gt;Ejecutando  &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;MiProyectoTest-hosted&lt;/span&gt; se prueban los bytecodes de Java en una Máquina Virtual (JVM). &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;MiProyectoTest-web&lt;/span&gt; verifica el JavaScript compilado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-7074476584019805370?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/7074476584019805370/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=7074476584019805370&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/7074476584019805370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/7074476584019805370'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/junitcreator.html' title='junitCreator'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-517268016702538355</id><published>2007-09-06T08:05:00.000-07:00</published><updated>2007-09-06T15:24:01.229-07:00</updated><title type='text'>applicationCreator</title><content type='html'>Genera un lanzador de aplicación y scripts para ejecutar el modo hosted y compilar a JavaScript.&lt;br /&gt;&lt;p class="consola"&gt;applicationCreator [-eclipse projectName] [-out dir] [-overwrite] [-ignore] classname&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-eclipse&lt;/span&gt;    Crea un lanzador de depuración para el proyecto Eclipse nombrado&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-out&lt;/span&gt;    El directorio donde se escribirán los archivos de salida&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-overwrite&lt;/span&gt;    Sobrescribe archivos existentes&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-ignore&lt;/span&gt;    Ignora cualquier archive existente; no sobrescribe&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;className&lt;/span&gt;    El nombre completo de la clase a crear&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ejemplo&lt;/span&gt;&lt;br /&gt;&lt;p class="consola"&gt;~/MiProyecto&gt; applicationCreator -eclipse MiProyecto com.example.foo.client.MiProyecto&lt;br /&gt; Created directory src/com/example/miproyecto/client&lt;br /&gt; Created directory src/com/example/miproyecto/public&lt;br /&gt; Created file src/com/example/miproyecto/MiProyecto.gwt.xml&lt;br /&gt; Created file src/com/example/miproyecto/public/MiProyecto.html&lt;br /&gt; Created file src/com/example/miproyecto/client/MiProyecto.java&lt;br /&gt; Created file MiProyecto.launch&lt;br /&gt; Created file MiProyecto-shell&lt;br /&gt; Created file MiProyecto-compile&lt;p&gt;&lt;br /&gt;Ejecutando &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;MiProyecto-shell&lt;/span&gt; sube la nueva aplicación en &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/depuracin-en-modo-hosted.html"&gt;modo hosted&lt;/a&gt;. &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;MiProyecto-compile&lt;/span&gt; traduce la aplicación Java a JavaScript, creando una carpeta en www. &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;MiProyecto.launch&lt;/span&gt; es un lanzador para Eclipse.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-517268016702538355?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/517268016702538355/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=517268016702538355&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/517268016702538355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/517268016702538355'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/applicationcreator.html' title='applicationCreator'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-8539359341814700907</id><published>2007-09-06T07:55:00.000-07:00</published><updated>2007-09-06T14:44:33.248-07:00</updated><title type='text'>projectCreator</title><content type='html'>Genera el esqueleto de un proyecto básico y, un archivo &lt;a href="http://www.blogger.com/ant.apache.org/"&gt;Ant&lt;/a&gt; opcional y/o proyecto para &lt;a href="http://www.blogger.com/www.eclipse.org/"&gt;Eclipse&lt;/a&gt;.&lt;br /&gt;&lt;p class="consola"&gt;&lt;span style="font-family:courier new;"&gt;projectCreator [-ant projectName] [-eclipse projectName] [-out dir] [-overwrite] [-ignore]&lt;/span&gt;&lt;/p&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-ant&lt;/span&gt;    Genera un archive Ant para compilar las fuentes (su extensión es .ant.xml)&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-eclipse&lt;/span&gt;    Genera un proyecto &lt;a href="http://www.blogger.com/www.eclipse.org/"&gt;Eclipse&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-out&lt;/span&gt;    El directorio donde se generarán los archivos de salida (por defecto la ruta actual)&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-overwrite&lt;/span&gt;    Sobre escribe los archivos existentes&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;-ignore&lt;/span&gt;    Ignora cualquier archivo existente; no lo sobrescribe&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ejemplo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="consola"&gt;&lt;span style="font-family:courier new;"&gt; ~/miproyecto&gt; projectCreator -ant MiProyecto -eclipse MiProyecto&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Created directory src&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Created directory test&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Created file Foo.ant.xml&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Created file .project&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Created file .classpath&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Ejecutando &lt;span style="font-family:courier new;"&gt;ant &lt;span style="color: rgb(0, 102, 0);"&gt;-f MiProyecto.ant.xml&lt;/span&gt;&lt;/span&gt; se compilará &lt;span style="font-family:courier new;"&gt;src&lt;/span&gt; dentro de &lt;span style="font-family:courier new;"&gt;bin&lt;/span&gt;. Usando el archivo ant, y con las opciones adecuadas, es posible compilar un proyecto a un archivo .jar.&lt;br /&gt;&lt;br /&gt;El archivo &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;.project&lt;/span&gt; puede ser importado dentro de un workspace de &lt;a href="http://www.blogger.com/www.eclipse.org/"&gt;Eclipse&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-8539359341814700907?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/8539359341814700907/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=8539359341814700907&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8539359341814700907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8539359341814700907'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/projectcreator.html' title='projectCreator'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-4324081161202600677</id><published>2007-09-06T07:38:00.000-07:00</published><updated>2007-09-06T14:30:14.386-07:00</updated><title type='text'>Herramientas de la línea de comandos</title><content type='html'>GWT te ofrece un pequeño set de herramientas de línea de comandos fáciles de manejar, para realizar diferentes tareas de una manera rápida. Éstas son también útiles para añadir nuevas cosas a los proyectos existentes. Por ejemplo, &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/projectcreator.html"&gt;&lt;span style="font-family:courier new;"&gt;projectCreator&lt;/span&gt;&lt;/a&gt; podría ser usado para crear un proyecto &lt;a href="http://www.blogger.com/www.eclipse.org/"&gt;Eclipse&lt;/a&gt; para uno de los ejemplos que viene con GWT.&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://esgooglewebtoolkit.blogspot.com/2007/09/projectcreator.html"&gt;projectCreator&lt;/a&gt;&lt;br /&gt;Genera el esqueleto de un proyecto básico y un archivo &lt;a href="http://ant.apache.org/"&gt;Ant&lt;/a&gt; opcional y/o proyecto para Eclipse.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/applicationcreator.html"&gt;&lt;span style="font-weight: bold;"&gt;aplicationCreator&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Genera el lanzador de una aplicación&lt;br /&gt;&lt;br /&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/junitcreator.html"&gt;&lt;span style="font-weight: bold;"&gt;junitCreator&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Genera un test JUnit&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://esgooglewebtoolkit.blogspot.com/2007/09/i18ncreator.html"&gt;i18nCreator&lt;/a&gt;&lt;br /&gt;Genera un archivo de propiedades i18n y un script de sincronización&lt;br /&gt;&lt;br /&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/benchmarkviewer.html"&gt;&lt;span style="font-weight: bold;"&gt;benchmarkViewer&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Muestra resultados benchmark&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-4324081161202600677?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/4324081161202600677/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=4324081161202600677&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/4324081161202600677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/4324081161202600677'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/herramientas-de-la-lnea-de-comandos.html' title='Herramientas de la línea de comandos'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-2095338558826291388</id><published>2007-09-06T07:34:00.000-07:00</published><updated>2007-09-06T14:27:39.701-07:00</updated><title type='text'>Filtrando paquetes públicos (public packages)</title><content type='html'>Los elementos &lt;span style="color: rgb(0, 102, 0); font-family: courier new;"&gt;&amp;lt;public&amp;gt;&lt;/span&gt; soportan ciertos atributos y elementos anidados para permitir patrones basados en inclusión y exclusión. Ésto utiliza las mismas reglas que un elemento &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;FileSet&lt;/span&gt; de &lt;a href="http://ant.apache.org/"&gt;Ant&lt;/a&gt;. Por favor leer la &lt;a href="http://ant.apache.org/manual/CoreTypes/fileset.html"&gt;documentación de FileSet&lt;/a&gt; para una visión general.&lt;br /&gt;&lt;br /&gt;El elemento &lt;span style="font-family:courier new;"&gt;&amp;lt;public&amp;gt;&lt;/span&gt; no soporta completamente la semántica de &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;FileSet&lt;/span&gt;. Solamente los siguientes atributos y elementos anidados son soportados:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;El atributo &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;include&lt;/span&gt;&lt;/li&gt;&lt;li&gt;El atributo &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;exclude&lt;/span&gt;&lt;/li&gt;&lt;li&gt;El atributo &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;defaultexcludes&lt;/span&gt;&lt;/li&gt;&lt;li&gt;El atributo &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;casesensitive&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Etiquetas &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;include&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);"&gt; &lt;/span&gt;anidadas&lt;/li&gt;&lt;li&gt;Etiquetas &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;exclude &lt;/span&gt;anidadas&lt;/li&gt;&lt;/ul&gt;Los demás atributos y elementos anidados no son soportados.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Importante&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El valor predeterminado de &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;defaultexcludes&lt;/span&gt; es &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;true&lt;/span&gt;. Por defecto, los patrones &lt;a href="http://ant.apache.org/manual/dirtasks.html#defaultexcludes"&gt;listados aquí&lt;/a&gt; son excluidos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-2095338558826291388?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/2095338558826291388/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=2095338558826291388&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/2095338558826291388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/2095338558826291388'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/filtrando-paquetes-pblicos-public.html' title='Filtrando paquetes públicos (public packages)'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-6425960719763879875</id><published>2007-09-06T07:17:00.000-07:00</published><updated>2007-09-07T11:25:30.209-07:00</updated><title type='text'>Inclusión de recursos automático</title><content type='html'>Los módulos pueden contener referencias a archivos JavaScript y CSS externos, causando que estos sean cargados automáticamente cuando el módulo mismo es cargado.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Incluyendo JavaScript Externo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La inclusión de scripts es una forma conveniente de asociar archivos JavaScript externos con tu modulo de manera automática. Usa la siguiente sintaxis para cargar un archivo JavaScript externo dentro de la &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/pginas-html.html"&gt;página alojada&lt;/a&gt; en tú proyecto, antes de que el entry point de tu módulo sea llamado:&lt;br /&gt;&lt;p class="codigo"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;script src="js-url"/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;El script es cargado dentro del namespace de la página como si lo hubieras incluido explícitamente usando la etiqueta &lt;span style="font-family:courier new;"&gt;&amp;lt;script&amp;gt;&lt;/span&gt; de HTML. El script será cargado antes que el método &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.core.client.EntryPoint.html#onModuleLoad%28%29"&gt;onLoadModule()&lt;/a&gt; sea llamado.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Incluyendo Hojas de Estilo Externas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La inclusión de hojas de estilo es una excelente forma de asociar archivos CSS externos con tú módulo de una manera automática. Usa la siguiente sintaxis para añadir archivos CSS externos a la página de tú módulo:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;p class="codigo"&gt;&amp;lt;stylesheet src="css-url"/&amp;gt;&lt;/p&gt;&lt;/span&gt;&lt;br /&gt;Puedes añadir cualquier número de hojas de estilo de ésta manera, y el orden de la inclusión dentro de la &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/pginas-html.html"&gt;página&lt;/a&gt; refleja el orden en que estos elementos aparecen en tú módulo XML.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Inclusión y herencia de módulos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La herencia de módulos crea recursos de inclusión particularmente convenientes. Si deseas crear una librería re-utilizable que depende de archivos JavaScript y CSS particulares, puedes estar seguro que los clientes de tú librería tienen todo lo que necesitan automáticamente, usando herencia desde tú módulo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Un consejo&lt;/span&gt;&lt;p class="consejo"&gt;Versiones de GWT posteriores a la versión 1.4 requieren una función script-ready para determinar cuando un script incluido fue cargado. Ahora esto ya no es necesario; todos los scripts incluidos serán cargados cuando la aplicación inicie, en el orden en el que estos fueron declarados.&lt;/p&gt;&lt;span style="font-weight: bold;"&gt;Entradas relacionadas&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/formato-de-mdulo-xml.html"&gt;Formato del módulo XML&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-6425960719763879875?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/6425960719763879875/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=6425960719763879875&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/6425960719763879875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/6425960719763879875'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/inclusin-de-recursos-automtico.html' title='Inclusión de recursos automático'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-2463529510698457945</id><published>2007-09-06T07:05:00.000-07:00</published><updated>2007-09-06T14:20:36.154-07:00</updated><title type='text'>Formato de módulo XML</title><content type='html'>Los módulos son definidos en ficheros XML cuya extención de archivo es &lt;span style="font-family: courier new; color: rgb(0, 102, 0);font-family:courier new;" &gt;.gwt.xml&lt;/span&gt;. Los archivos de módulos XML deben residir en el paquete raiz de tú proyecto.&lt;br /&gt;&lt;br /&gt;Si tu estás usando una &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/estructura-de-un-proyecto.html"&gt;estructura estándar de proyecto&lt;/a&gt;, tu módulo XML puede ser tan simple como esto:&lt;br /&gt;&lt;p class="codigo"&gt;&amp;lt;module&amp;gt;&lt;br /&gt;   &amp;lt;inherits name="com.google.gwt.user.User"/&amp;gt;&lt;br /&gt;   &amp;lt;entry-point class="com.example.cal.client.CalendarApp"/&amp;gt;&lt;br /&gt;&amp;lt;/module&amp;gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cargando módulos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Los archivos de módulos XML son encontrados en el classpath de Java, referenciados por su propio nombre de módulo desde las páginas alojadas en el proyecto, y por ser heredados por otros módulos.&lt;br /&gt;&lt;br /&gt;Los módulos son siempre referenciados por sus nombres lógicos. El nombre lógico de un módulo es del tipo &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;pkg1.pkg2.NombreModulo&lt;/span&gt; (aunque pueden haber cualquier número de paquetes) y excluyendo incluso la extensión del archivo. Por ejemplo, el nombre lógico de un archivo de módulo XML situado en&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new; color: rgb(255, 102, 0);"&gt;~/src/com/ejemplo/cal/Calendario.gwt.xml&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;es&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 0); font-family: courier new;"&gt;com.ejemplo.cal.Calendario&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Elementos disponibles&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;inherits name="logical-module-name"/&amp;gt;&lt;/span&gt;&lt;br /&gt;Hereda todas las configuraciones desde el módulo especificado  como si el contenido del módulo XML heredado fuera copiado literalmente. Cualquier número de módulos pueden ser heredados de ésta forma.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;entry-point class="classname"/&amp;gt;&lt;/span&gt;&lt;br /&gt;Especifica una clase &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.core.client.EntryPoint.html"&gt;entry point&lt;/a&gt;. Cualquier número de clases entry-point pueden ser añadidas, incluyendo los provenientes de módulos heredados.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;source path="path"/&amp;gt;&lt;/span&gt;&lt;br /&gt;Añade paquetes al &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/mdulos.html"&gt;source path&lt;/a&gt; para combinar los paquetes en que el módulo XML es encontrado con el path especificado al subpaquete. Cualquier archivo de Java que aparezca en este subpaquete o cualquiera de sus subpaquetes son traducidos.&lt;br /&gt;Si no se define ningún elemento &amp;lt;source&amp;gt; en un archivo de módulo XML, el subpaquete &lt;span style="font-family:courier new;"&gt;client &lt;/span&gt;es implicitamente añadido al source path como si &amp;lt;source path="client"&amp;gt; huviera sido encontrado en el XML.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;public path="path"/&amp;gt;&lt;/span&gt;&lt;br /&gt;Añade paquetes al &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/mdulos.html"&gt;public path&lt;/a&gt; para combinar el paquete en el que el módulo XML es encontrado con el path especificado para identificar la raiz del public path. Cualquier archivo que aparezca en este paquete o cualquiera de sus subpaquetes será tratado como un recurso de acceso público. El elemento &lt;span style="font-family:courier new;"&gt;&amp;lt;public&amp;gt;&lt;/span&gt; soporta &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/filtrando-paquetes-pblicos-public.html"&gt;filtrado pattern-based&lt;/a&gt; para permitir control de fine-grained sobre los recursos copiados al directorio de salida durante el proceso de compilación.&lt;br /&gt;Si no se define un elemento &lt;span style="font-family:courier new;"&gt;&amp;lt;public&amp;gt;&lt;/span&gt; en un archivo de módulo XML, el subpaquete public es añadido implicitamente al public path como si &lt;span style="font-family:courier new;"&gt;&amp;lt;public path="public"&amp;gt;&lt;/span&gt; hubiera sido encontrado en el XML.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;servlet path="url-path" class="classname"/&amp;gt;&lt;/span&gt;&lt;br /&gt;Para el uso conveniente de RPC, este elemento carga una clase servlet montada como el path URL especificado. El path URL  debe ser absoluto y tener la forma de un directorio (por ejemplo, /spellchek). Tu código cliente  entonces, especifica éste mapeo de URL en una llamada al método &lt;a style="font-family: courier new;" href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.rpc.ServiceDefTarget.html#setServiceEntryPoint%28java.lang.String%29"&gt;ServiceDefTarget.setServiceEntryPoint(String)&lt;/a&gt;. Cualquier número de servlets puede ser cargado de ésta manera, incluyedo los que módulos heredados.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;script src="js-url"/&amp;gt;&lt;br /&gt;&lt;/span&gt;Injecta automaticamente archivos JavaScript externos localizados en la ruta src. Ver &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/inclusin-de-recursos-automtico.html"&gt;Inclusión automatica de recursos&lt;/a&gt; para más detalles.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;stylesheet src="css-url"/&amp;gt;&lt;/span&gt;&lt;br /&gt;Injecta automaticamente hojas de estilo en cascada situadas en archivos externos, localizados en la ruta src. Ver &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/inclusin-de-recursos-automtico.html"&gt;Inclusión automatica de recursos&lt;/a&gt; para más detalles.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;extend-property name="client-property-name" values="comma-separated-values"/&amp;gt;&lt;/span&gt;&lt;br /&gt;Extiende el conjunto de valores para una  propiedad del cliente existente. Cualquier número de valores puede ser añadido de ésta manera, y los valores de la propiedad del cliente acmumulado desde módulos heredados. Tú querrás usar esto si vas a crear un &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.Internationalization.SpecifyingLocale.html"&gt;proyecto con Internazionalización&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-2463529510698457945?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/2463529510698457945/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=2463529510698457945&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/2463529510698457945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/2463529510698457945'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/formato-de-mdulo-xml.html' title='Formato de módulo XML'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-8941833045474477758</id><published>2007-09-06T06:53:00.000-07:00</published><updated>2007-09-06T14:15:41.248-07:00</updated><title type='text'>Módulos</title><content type='html'>Las unidades individuales (valga la redundancia) de configuraciones en GWT son archivos XML llamados módulos. Un módulo reúne todos los datos de configuración que tu proyecto GWT necesita, es decir:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Módulos heredados&lt;/li&gt;&lt;li&gt;Un nombre de clase; esto es opcional, aunque cualquier módulo referido a un HTML debe tener al menos una clase entry-point especificada.&lt;/li&gt;&lt;li&gt;Entradas a los source paths&lt;/li&gt;&lt;li&gt;Entradas a los public paths&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Los módulos pueden aparecer en cualquier paquete en tu classpath, aunque es altamente recomendable que estos aparezcan en el paquete raíz de un &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/estructura-de-un-proyecto.html"&gt;proyecto estándar&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Clases entry-point&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Un módulo &lt;span style="font-weight: bold;"&gt;entry-point&lt;/span&gt; es cualquier clase que es asignable a &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.core.client.EntryPoint.html"&gt;EntryPoint&lt;/a&gt; y que puede ser construida sin parámetros. Cuando un módulo es cargado, cada clase entry point es instanciada y el método &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.core.client.EntryPoint.html#onModuleLoad%28%29"&gt;EntryPoint.onModuleLoad()&lt;/a&gt; es llamado.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Source Path&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Los módulos pueden especificar qué subpaquetes contienen código fuente traducible, provocando que el paquete nombrado y sus subpaquetes sean añadidos al source path. Solamente los archivos encontrados en el source path son candidatos para ser traducidos a JavaScript, haciendo posible que se mezclen códigos fuentes del lado del cliente (&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/cdigo-del-lado-del-cliente-client-side.html"&gt;client-side&lt;/a&gt;) con los del lado del servidor (&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/cdigo-del-lado-del-servidor-server-side.html"&gt;server-side&lt;/a&gt;) en el mismo classpath sin ningún tipo de conflicto.&lt;br /&gt;&lt;br /&gt;Cuando un módulo hereda de otro, sus source path son combinados así que cada módulo tendrá acceso al código fuente traducible que requiera.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Public path&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Los módulos pueden especificar qué subpaquetes son públicos, provocando que el paquete nombrado y sus subpaquetes sean añadidos al public path. Cuando compilas tú aplicación a JavaScipt, todos los archivos que pueden ser encontrados sobre tu public path son copiados al directorio de salida de los módulos. El efecto en la red es que las URLs visibles al usuario no necesitan incluir un nombre de paquete completo.&lt;br /&gt;&lt;br /&gt;Cuando un módulo hereda de otro módulo, sus public paths son combinados así que cada módulo tendrá acceso al recurso estático que requiera.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Especificaciones&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.Fundamentals.Modules.ModuleXml.html"&gt;&lt;/a&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/formato-de-mdulo-xml.html"&gt;Formato de módulos XML&lt;/a&gt;&lt;br /&gt;Los módulos son definidos en XML y situados dentro de la jerarquía de paquetes de tu proyecto&lt;/li&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/inclusin-de-recursos-automtico.html"&gt;Inclusion Automática de paquetes&lt;/a&gt;&lt;br /&gt;Los módulos contienen referencias a archivos JavaScript y CSS externos, causando que estos sean cargados cuando el módulo mismo es cargado.&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.Fundamentals.Modules.PublicPackageFiltering.html"&gt;&lt;/a&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/filtrando-paquetes-pblicos-public.html"&gt;Filtrado de paquetes públicos&lt;/a&gt;&lt;br /&gt;Filtra archivos dentro y fuera de tu public path para evitar la publicación accidental de archivos.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-8941833045474477758?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/8941833045474477758/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=8941833045474477758&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8941833045474477758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8941833045474477758'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/mdulos.html' title='Módulos'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-3769029463731586506</id><published>2007-09-05T12:43:00.000-07:00</published><updated>2007-09-14T14:08:45.458-07:00</updated><title type='text'>Estructura de un proyecto</title><content type='html'>Los proyectos Google Web Toolkit están cubiertos con una capa de paquetes de Java. Si tú estás iniciando un proyecto Google Web Toolkit desde cero, debes usar la capa de paquetes estándar de Google Web Toolkit, que permite diferenciar fácilmente el código del &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/cdigo-del-lado-del-cliente-client-side.html"&gt;lado del cliente&lt;/a&gt; del código del &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/cdigo-del-lado-del-servidor-server-side.html"&gt;lado del servidor&lt;/a&gt;. Por ejemplo, supongamos que tu nuevo proyecto es llamado "Calendar". La capa de paquetes estándar deberá verse así:&lt;br /&gt;&lt;table style="width: 677px; height: 128px;"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Paquete&lt;/th&gt;&lt;th&gt;Propósito&lt;/th&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="font-family: courier new; color: rgb(0, 102, 0);"&gt;com/example/cal/&lt;/td&gt;&lt;td&gt;El paquete raíz del proyecto contiene archivos del &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/formato-de-mdulo-xml.html"&gt;modulo en XML&lt;/a&gt; com/example/cal/client/ Código del lado del cliente y subpaquetes&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="color: rgb(0, 102, 0); font-family: courier new;"&gt;com/example/cal/server/&lt;/td&gt;&lt;td&gt;Código del lado del servidor y subpaquetes&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="color: rgb(0, 102, 0); font-family: courier new;"&gt;com/example/cal/public/&lt;/td&gt;&lt;td&gt;Recursos estáticos que pueden ser servidos públicamente&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;Y archivos de dentro de los paquetes así:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;com/example/cal/Calendar.gwt.xml&lt;/span&gt;&lt;br /&gt;Un &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/mdulos.html"&gt;módulo&lt;/a&gt; básico para tu proyecto que hereda del módulo com.google.gwt.user.User&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;com/example/cal/CalendarApp.gwt.xml&lt;/span&gt;&lt;br /&gt;Hereda del modulo com.example.cal.Calendar (arriba) y añade una clase de punto de entrada (entry-point)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;com/example/cal/CalendarTest.gwt.xml&lt;/span&gt;&lt;br /&gt;Un &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/mdulos.html"&gt;módulo&lt;/a&gt; definido por tu proyecto&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;com/example/cal/client/CalendarApp.java&lt;/span&gt;&lt;br /&gt;Código fuente Java del lado del servidor para la clase entry-point&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;com/example/cal/client/spelling/SpellingService.java&lt;/span&gt;&lt;br /&gt;Un interfaz del servicio RPC service definida en un subpaquete&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;com/example/cal/server/spelling/SpellingServiceImpl.java&lt;/span&gt;&lt;br /&gt;Código fuente Java  que implementa la lógica del servicio de verificación de sintaxis&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;com/example/cal/public/Calendar.html&lt;/span&gt;&lt;br /&gt;Una página HTML que carga la aplicación&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;com/example/cal/public/Calendar.css&lt;/span&gt;&lt;br /&gt;Una hoja de estilo para la aplicación&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;com/example/cal/public/images/logo.gif&lt;/span&gt;&lt;br /&gt;Un logo&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="font-weight: bold;"&gt;Un consejo&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="codigo"&gt;La mejor forma de crear un proyecto Google Web Toolkit desde cero es usar el “projectCreator script”.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-3769029463731586506?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/3769029463731586506/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=3769029463731586506&amp;isPopup=true' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/3769029463731586506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/3769029463731586506'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/estructura-de-un-proyecto.html' title='Estructura de un proyecto'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-2238196331778261546</id><published>2007-09-05T12:29:00.000-07:00</published><updated>2007-09-07T10:59:39.211-07:00</updated><title type='text'>Código del lado del servidor (server-side Code)</title><content type='html'>Todo lo que suceda dentro del servidor es llamado procesamiento del lado del servidor, o server-side processing. Cuando tu aplicación tu aplicación necesita interactuar con el servidor (por ejemplo, para cargar o guardar datos), ésta realiza una petición del lado del cliente (client-side request) desde el navegador, a través de la red usando invocaciones remotas a métodos (&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.html"&gt;remote procedure call, RPC&lt;/a&gt;). Mientras se está procesando una llamada RPC, tu servidor está ejecutando código del lado del servidor.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Un consejo&lt;/span&gt;&lt;p style="font-style: italic;" class="consejo"&gt;Google Web Toolkit no se “entromete” en la posibilidad de correr códigos de bytes de Java (bytecodes) sobre el servidor. El código del lado del servidor (server-side code) no necesita ser traducido, por lo que eres libre de elegir cualquier librería para que consideres necesaria.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-2238196331778261546?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/2238196331778261546/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=2238196331778261546&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/2238196331778261546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/2238196331778261546'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/cdigo-del-lado-del-servidor-server-side.html' title='Código del lado del servidor (server-side Code)'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-4641294569915817340</id><published>2007-09-05T12:21:00.001-07:00</published><updated>2007-09-06T14:12:42.417-07:00</updated><title type='text'>Código del lado del cliente (Client-side code)</title><content type='html'>Una vez terminada, tu aplicación será enviada por la red a un usuario, donde correrá como JavaScript dentro del navegador de este. Todo lo que suceda dentro del navegador de tu usuario es llamado procesamiento del lado del cliente, o client-side processing.&lt;br /&gt;&lt;br /&gt;Cuando escribes “client-side code” que está pensado para correr en el navegador web, recuerda que finalmente es convertido en código JavaScript. Por ende, es importante usar solamente librerías y lenguaje Java que puedan ser &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/el-compilador-de-google-web-tooltik.html"&gt;traducidos&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-4641294569915817340?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/4641294569915817340/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=4641294569915817340&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/4641294569915817340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/4641294569915817340'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/cdigo-del-lado-del-cliente-client-side.html' title='Código del lado del cliente (Client-side code)'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-1351084232993581748</id><published>2007-09-05T12:05:00.000-07:00</published><updated>2007-09-06T13:58:50.425-07:00</updated><title type='text'>Páginas HTML alojadas en tu proyecto</title><content type='html'>Cualquier página HTML alojada en tu proyecto puede incluir código creado con Google Web Toolkit. Una página HTML normalmente se ve como esto:&lt;br /&gt;&lt;p class="codigo"&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Properties can be specified to influenvce deferred binding --&amp;gt;&lt;br /&gt;&amp;lt;meta name='gwt:property' content='locale=en_UK'&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Stylesheets are optional, but useful --&amp;gt;&lt;br /&gt;&amp;lt;link rel="stylesheet" href="Calendar.css"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Titles are optional, but useful --&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Calendar App&amp;lt;/title&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- The fully-qualified module name, followed by 'nocache.js' --&amp;gt;&lt;br /&gt;&amp;lt;script language="javascript" src="com.example.cal.Calendar.nocache.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Include a history iframe to enable full GWT history support --&amp;gt;&lt;br /&gt;&amp;lt;!-- (the id must be exactly as shown)                           --&amp;gt;&lt;br /&gt;&amp;lt;iframe src="javascript:''" id="__gwt_historyFrame" style="width:0;height:0;border:0"&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/p&gt;&lt;br /&gt;La estructura fue diseñada para hacer que sea fácil de añadir las funcionalidades de Google Web Toolkit a aplicaciones web existentes con pocos cambios sobre las mismas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-1351084232993581748?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/1351084232993581748/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=1351084232993581748&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/1351084232993581748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/1351084232993581748'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/pginas-html.html' title='Páginas HTML alojadas en tu proyecto'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-1491442956768572831</id><published>2007-09-05T11:39:00.000-07:00</published><updated>2007-09-06T15:04:26.814-07:00</updated><title type='text'>Desarrollo en Modo Web (web mode)</title><content type='html'>Mientras desarrollas una aplicación, debes “moverte” entre el desarrollo y el testeo de la misma, y empezarás a interactuar con tu aplicación en modo web muy a menudo. El modo Web se refiere a acceder a tu aplicación desde un navegador normal – donde se ejecuta solamente JavaScript – tal como se pretende que los usuarios lo hagan al final, cuando ya esté lista.&lt;br /&gt;&lt;br /&gt;Para crear una versión de modo web de tu aplicación, debes compilarlo usando ya sea el botón "Compile/Browse" dentro de la ventana del modo hosted o desde el compilador de la línea de comandos &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;com.google.gwt.dev.GWTCompiler&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;El Modo Web demuestra como funcionaría tu aplicación después de terminada, es decir, cuando tu aplicación se ejecute sobre un navegador que solamente necesitará un intérprete de JavaScript y NO requerirá ningún plug-in o la JVM.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-1491442956768572831?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/1491442956768572831/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=1491442956768572831&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/1491442956768572831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/1491442956768572831'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/desarrollo-en-modo-web.html' title='Desarrollo en Modo Web (web mode)'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-915361040419459249</id><published>2007-09-05T11:30:00.000-07:00</published><updated>2007-09-07T11:23:37.144-07:00</updated><title type='text'>Depuración en Modo Hosted (hosted mode)</title><content type='html'>Tú gastarás la mayor parte del tiempo de desarrollo en el &lt;span style="font-weight: bold;"&gt;Modo Hosted&lt;/span&gt;, que significa que estás interactuando y probando tu aplicación Google Web Toolkit sin que ésta haya sido traducida a JavaScript. En cualquier momento tú puedes editar, correr, y depurar aplicaciones desde un entorno de desarrollo integrado (IDE) de Java, mientras estás en “modo hosted”. Al correr en modo hosted, la máquina virtual de (JVM) está actualmente ejecutando el código de tu aplicación como un archivo &lt;a href="http://www.blogger.com/es.wikipedia.org/wiki/Bytecode"&gt;ByteCode&lt;/a&gt; compilado, usando Google Web Toolkit, que incrusta la aplicación en la ventana de un navegador. Si recordamos el típico ciclo de desarrollo de aplicaciones "codificar-probar-depurar", el modo hosted es de lejos la manera más productiva de desarrollar tu aplicación rápidamente.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Un consejo&lt;/span&gt;&lt;p class="consejo"&gt;En modo hosted, el desarrollo de aplicaciones Google Web Toolkit utiliza mucho la línea de comandos usando el classpath de la JVM's y tu path general. Asegúrate de tener la ruta donde está el núcleo de GWT y de tu aplicación en tu path cuando corras un proyecto.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-915361040419459249?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/915361040419459249/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=915361040419459249&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/915361040419459249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/915361040419459249'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/depuracin-en-modo-hosted.html' title='Depuración en Modo Hosted (hosted mode)'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-5175667771340732280</id><published>2007-09-05T10:43:00.000-07:00</published><updated>2007-09-06T13:47:28.933-07:00</updated><title type='text'>Soporte a Cross-browser (DHTML)</title><content type='html'>Google Web Toolkit te protege de las preocupaciones que puedan surgir acerca de las incompatibilidades con cross-browser (DHTML compatible con todos los navegadores). Si estás construyendo widgets (por ejemplo), tus aplicaciones trabajarán de una manera similar en las recientes versiones de los navegadores Internet Explorer, Firefox, y Safari. (en Opera también, la mayoría de las veces). La construcción de interfaces de usuario DHTML no es para tomárselo a la ligera, por esto, es importante que pruebes tus aplicaciones sobre todos y cada uno de los navegadores antes de terminar de programar.&lt;br /&gt;&lt;br /&gt;Siempre que sea posible, Google Web Toolkit utiliza los elementos nativos de la interfaz gráfica de usuario. Por ejemplo, el objeto &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Button.html"&gt;botón&lt;/a&gt; de Google Web Toolkit es en realidad una etiqueta &lt;span style="font-family:courier new;"&gt;&lt;&gt;&lt;/span&gt; de HTML, en vez de un botón construido sintéticamente desde una etiqueta &lt;span style="font-family:courier new;"&gt;&lt;&gt;&lt;/span&gt;. Esto significa que los botones de Google Web Toolkit son renderizados apropiadamente en los distintos tipos de navegadores y sobre diferentes sistemas operativos. A los desarrolladores de Google Web Toolkit les gusta el uso nativo de controles ya que éstos son más rápidos, accesibles, y más familiares para los usuarios.&lt;br /&gt;&lt;br /&gt;En lo que se refiere a dar estilo a aplicaciones Web, &lt;a href="http://www.w3.org/Style/CSS/"&gt;CSS &lt;/a&gt;es ideal. Así que, en vez de tratar de encapsular la estilización de la interfaz de usuario detrás de una pared de APIs, Google Web Toolkit provee muy pocos métodos directamente relacionados con el estilo. En vez de ello, los desarrolladores están entusiasmados en definir hojas de estilos que son linkeadas al código de la aplicación usando &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.UIObject.html#setStyleName%28java.lang.String%29"&gt;nombres de estilo&lt;/a&gt;. Además de limpiar la aplicación, separando la presentación visual y el código, ésta división de labores ayuda a las aplicaciones a cargar y renderizarze más rápidamente, consume menos memoria, y hace más fácil el desarrollo impidiendo que nos tengamos que “devolver” a un punto, con el fin de cambiar el estilo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Entradas relacionadas&lt;/span&gt;&lt;br /&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.UserInterface.StyleSheets.html"&gt;Hojas de estilo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-5175667771340732280?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/5175667771340732280/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=5175667771340732280&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/5175667771340732280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/5175667771340732280'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/soporte-cross-browser-dhtml.html' title='Soporte a Cross-browser (DHTML)'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-9158395881431385693</id><published>2007-09-05T10:38:00.000-07:00</published><updated>2007-09-06T13:46:13.327-07:00</updated><title type='text'>Soporte a Runtime Library</title><content type='html'>Google Web Toolkit soporta solamente una pequeña parte de las librerías de clases disponibles en &lt;a href="http://www.blogger.com/java.sun.com/javase/"&gt;Java 2 Standard Edition&lt;/a&gt; y &lt;a href="http://www.blogger.com/java.sun.com/javaee/"&gt;Enterprise Edition&lt;/a&gt;, esto sucede ya que éstas librerías son bastantemente grandes y usan funcionalidades que no están disponibles en navegadores web. Para enterarse completamente de qué clases y métodos son soportados por el núcleo de paquetes Java, ver la referencia del API para &lt;a href="http://code.google.com/webtoolkit/documentation/java.lang.html"&gt;java.lang&lt;/a&gt; y &lt;a href="http://code.google.com/webtoolkit/documentation/java.util.html"&gt;java.util&lt;/a&gt;, en donde se listan las clases a las que se les dio soporte y contiene notas acerca de las diferencias entre lo soportado y el estándar de Java.&lt;br /&gt;&lt;br /&gt;Algunas áreas específicas en las que la emulación Google Web Toolkit difiere desde el estándar de Java son:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Expresiones regulares&lt;/span&gt;&lt;br /&gt;La sintaxis para &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html"&gt;expresiones regulares en Java&lt;/a&gt; es similar, pero no idéntico, a las &lt;a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Regular_Expressions"&gt;expresiones regulares en JavaScript&lt;/a&gt;. Por ejemplo, los métodos &lt;span style="font-family:courier new;"&gt;&lt;a style="color: rgb(0, 102, 0);" href="http://code.google.com/webtoolkit/documentation/java.lang.String.html#replaceAll%28java.lang.String,%20java.lang.String%29"&gt;replaceAll&lt;/a&gt; &lt;/span&gt;y &lt;a style="color: rgb(0, 102, 0);" href="http://code.google.com/webtoolkit/documentation/java.lang.String.html#split%28java.lang.String%29"&gt;&lt;span style="font-family:courier new;"&gt;split&lt;/span&gt;&lt;/a&gt; usan expresiones regulares. Así que, te aconsejo que seas cuidadoso de usar expresiones regulares que tienen el mismo significado tanto en Java como en JavaScript.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Serialización&lt;/span&gt;&lt;br /&gt;La serialización Java requiere de en unos cuantos mecanismos que no están disponibles en JavaScript, como por ejemplo el cargar dinámicamente clases y la reflexión. Por consiguiente, Google Web Toolkit no soporta el estándar de serialización de Java. En lugar de eso, Google Web Toolkit tiene una facilidad de soporte para RPC, que provee serialización automática de objetos desde y hacia el servidor usando invocación de métodos remotos.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Un consejo&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="consejo"&gt;Ahorrarás muchas frustraciones (y tiempo)  si te aseguras de usar solamente las clases que son traducibles en el código del &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/cdigo-del-lado-del-cliente-client-side.html"&gt;lado del cliente&lt;/a&gt;, desde el principio. Para ayudarte a identificar problemas anticipadamente, tu código es verificado contra la biblioteca de emulación JRE cada vez que corras tu aplicación en &lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/depuracin-en-modo-hosted.html"&gt;modo hosted&lt;/a&gt;. Como resultado, la mayoría de las veces que uses clases que no están soportadas serán notificadas la primera vez que intentes correr tu aplicación. Así que es mejor que pruebes el código a menudo, en modo hosted.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Entradas relacionadas&lt;br /&gt;&lt;/span&gt;&lt;ul style="font-family: courier new;"&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/java.lang.html"&gt;java.lang&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/java.util.html"&gt;java.util&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-9158395881431385693?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/9158395881431385693/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=9158395881431385693&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/9158395881431385693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/9158395881431385693'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/soporte-runtime-library.html' title='Soporte a Runtime Library'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-8895136694401324960</id><published>2007-09-05T09:30:00.000-07:00</published><updated>2007-09-06T13:35:20.989-07:00</updated><title type='text'>Soporte del Lenguaje Java</title><content type='html'>Google Web Toolkit compila el código de Java que es compatible con J2SE 1.4.2.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Tipos de datos nativos.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;byte&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;char&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;short&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;int&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;long&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;float&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;double&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Object&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;String&lt;/span&gt;, y arreglos son soportados. Sin embargo, no existen tipos integrales de 64-bit integral en JavaScript, así que las variables de tipo long son mapeadas a variables de coma flotante en JavaScript. Para asegurar la máxima consistencia entre el “&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/depuracin-en-modo-hosted.html"&gt;modo hosted&lt;/a&gt;” y el “&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/desarrollo-en-modo-web.html"&gt;modo web&lt;/a&gt;”, se recomienda que tu uses variables tipo &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;int&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Excepciones.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;try&lt;/span&gt;, &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;catch&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;finally&lt;/span&gt; &lt;/span&gt;y excepciones definidas por el usuario son soportadas normalmente, aunque &lt;span style="color: rgb(0, 102, 0); font-family: courier new;"&gt;Throwable.getStackTrace()&lt;/span&gt; no es soportada por el modo web. Ver la sección de &lt;a href="http://code.google.com/webtoolkit/documentation/java.lang.Throwable.html"&gt;excepciones&lt;/a&gt; para detalles adicionales.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Sentencia assert.&lt;/span&gt;&lt;br /&gt;El compilador Google Web Toolkit parséa las sentencias  &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;assert&lt;/span&gt;, pero no emite código JavaScript para ellas.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Multi-hilado (subprocesamiento múltiple) y sincronización.&lt;/span&gt;&lt;br /&gt;Los intérpretes de JavaScript usan single-threaded (uso de hilos simple), así que cuando Google Web Toolkit acepta la palabra &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;synchronized&lt;/span&gt;, en realidad esto NO tiene ningún efecto sobre la aplicación final. Los métodos de las librerías de sincronización no están disponibles, incluyendo &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Object.wait()&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Object.notify()&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;, y &lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Object.notifyAll()&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Reflexión.&lt;/span&gt;&lt;br /&gt;Para un mejor desempeño, Google Web Toolkit compila tu código Java dentro de un script monolítico, y no soporta la carga subsecuente de clases. Ésta y otras optimizaciones excluyen el soporte general para la refexión. Es posible consultar el nombre de clase de un objeto usando el método Google Web &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;Toolkit.getTypeName(Object)&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Finalización (recolección de basura).&lt;/span&gt;&lt;br /&gt;JavaScript no soporta finalización durante la recolección de basura, así que Google Web Toolkit no puede usar nada similar a los finalizadores de Java (una de las principales características de este lenguaje) en modo web.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Strict Floating-Point.&lt;/span&gt;&lt;br /&gt;La especificación del lenguaje de programación Java soporta variables de punto flotante (floating-point), incluyendo números de single-precision y double-precisión así como también la palabra reservada &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;strictfp&lt;/span&gt;. Google Web Toolkit no tiene soporte para la palabra &lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;strictfp&lt;/span&gt; &lt;/span&gt;y no puede asegurar cualquier grado de precisión de punto flotante en el código traducido, así que lo mejor que puedes hacer es evitar en lo posible el uso de cálculos en el lado del cliente (en el navegador) que requieran un nivel alto de precisión.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Entradas relacionadas&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/soporte-runtime-library.html"&gt;Soporte para Runtime Library&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-8895136694401324960?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/8895136694401324960/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=8895136694401324960&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8895136694401324960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/8895136694401324960'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/soporte-del-lenguaje-java.html' title='Soporte del Lenguaje Java'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8501111367129157984.post-1155130405338491900</id><published>2007-09-05T09:09:00.000-07:00</published><updated>2007-09-06T13:28:16.889-07:00</updated><title type='text'>El compilador de Google Web Tooltik</title><content type='html'>El corazón de Google Web Tooltik es un compilador que traduce el código Java en JavaScript, convirtiendo así tu aplicación desarrollada en Java en una aplicación equivalente en JavaScript.&lt;br /&gt;&lt;br /&gt;En pocas palabras, si tu aplicación Google Web Tooltik compila y corre en "&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/depuracin-en-modo-hosted.html"&gt;hosted mode&lt;/a&gt;" como tu esperabas, y si Google Web Tooltik compila/traduce tu aplicación a JavaScript sin problemas entonces tu aplicación está lista para correr sobre un navegador web desde cualquier &lt;a href="http://www.blogger.com/casidiablo.net/wordpress/index.php/2007/01/14/%C3%82%C2%BFque-es-un-servidor-web/"&gt;servidor http&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;El compilador Google Web Tooltik soporta la mayoría de las características del &lt;a href="http://www.blogger.com/casidiablo.net/wordpress/index.php/2007/01/12/acerca-de-java/"&gt;lenguaje de programación Java&lt;/a&gt;. Mientras que las librerías Google Web Tooltik runtime emulan una gran parte de las libreías de Java.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Las especificaciones&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/soporte-del-lenguaje-java.html"&gt;Soporte del Lenguaje&lt;/a&gt;:&lt;br /&gt;&lt;/span&gt;Google Web Tooltik soporta la mayoría del núcleo del lenguaje Java 1.4 (semánticamente hablando), pero hay algunas diferencias de las que querrás darte cuenta.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;&lt;a href="http://esgooglewebtoolkit.blogspot.com/2007/09/soporte-runtime-library.html"&gt;Sorpote a librerías en tiempo de ejecución (Runtime Library)&lt;/a&gt;:&lt;/span&gt;&lt;br /&gt;Google Web Tooltik emula un conjunto básico de clases estándar de Java.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8501111367129157984-1155130405338491900?l=esgooglewebtoolkit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://esgooglewebtoolkit.blogspot.com/feeds/1155130405338491900/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8501111367129157984&amp;postID=1155130405338491900&amp;isPopup=true' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/1155130405338491900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8501111367129157984/posts/default/1155130405338491900'/><link rel='alternate' type='text/html' href='http://esgooglewebtoolkit.blogspot.com/2007/09/el-compilador-de-google-web-tooltik.html' title='El compilador de Google Web Tooltik'/><author><name>Casidiablo</name><uri>http://www.blogger.com/profile/09978105581575050152</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry></feed>
