tutorial showcase for example ejemplos java ajax gwt gwt-ext

java - for - gwt showcase



Las mayores trampas de GWT? (24)

Agregaré algunos puntos a los ya mencionados:

  • Databinding / validation. GWT no tiene un soporte de enlace / validación de datos listo para usar, aunque hay algunos proyectos en esta área que comienzan a surgir. Te encontrarás escribiendo mucho de esto:

TextField fname, faddress; ... fname.setText(person.getName()); faddress.setText(person.getAddress()); ...

  • Carga lenta. Como gwt está en el lado del cliente, la carga diferida no es una opción. Deberá diseñar sus RPC y objetos de dominio cuidadosamente para
    • envía todos tus datos de objeto que se necesitan
    • evite ansioso buscar todos sus datos
    • También deberá asegurarse de no enviar proxies / objetos no serializables. hibernate4gwt puede ayudarte con estos puntos.
  • Diseño de interfaz de usuario. Es más difícil visualizar una IU en java (paneles, botones, etc.) que en html.
  • Soporte de historial GWT no se envía con un subsistema de historial, ni se envía con ningún subsistema para URL agradables o marcadores de estado completo. Tendrás que lanzar el tuyo (aunque tiene soporte para tokens de Historial, que es un comienzo). Esto sucede con todos los kits de herramientas de AJAX AFAIK.

En mi humilde opinión, a GWT le falta un marco que tenga soporte listo para usar para todos los problemas mencionados en este ''hilo''.

Estoy al principio / medio de un proyecto que elegimos implementar usando GWT. ¿Alguien ha encontrado alguna trampa importante en el uso de GWT (y GWT-EXT) que no se pudieron superar? ¿Qué tal desde una perspectiva de rendimiento?

Un par de cosas que hemos visto / escuchado ya incluyen:

  • Google no puede indexar el contenido
  • CSS y el estilo en general parece ser un poco escamosa

Buscando cualquier comentario adicional sobre estos artículos también. ¡Gracias!


Comenzaré diciendo que soy un gran fanático de GWT, pero sí hay muchas trampas, pero la mayoría, si no todas, pudimos superar:

Problema: Tiempos de compilación largos, a medida que su proyecto crece, también aumenta la cantidad de tiempo que lleva compilarlo. He oído de informes de compilaciones de 20 minutos, pero las mías son en promedio de 1 minuto.

Solución: divida su código en módulos separados y dígale a hormiga que solo lo construya cuando se modifique. También durante el desarrollo, puede acelerar masivamente los tiempos de compilación construyendo solo para un navegador. Puede hacer esto colocando esto en su archivo .gwt.xml:

<set-property name="user.agent" value="gecko1_8" />

Donde gecko1_8 es Firefox 2+, ie6 es IE, etc.

Problema: el modo alojado es muy lento (al menos en OS X) y no se acerca a los cambios "en vivo" que se obtienen cuando edita cosas como páginas JSP o Rails y pulsa actualizar en su navegador.

Solución: Puede darle más memoria al modo alojado (generalmente obtengo 512M) pero aún es lento. Una vez que se ha hecho suficientemente bueno con GWT, he encontrado que deja de usarlo. Realiza una gran cantidad de cambios, luego compila para un solo navegador (en general vale 20 veces la compilación) y luego pulsa actualizar en su navegador.

Actualización: con GWT 2.0+ esto ya no es un problema, ya que utiliza el nuevo ''Modo de desarrollo''. Básicamente significa que puede ejecutar el código directamente en el navegador de su elección, por lo que no hay pérdida de velocidad, además puede disparar / inspeccionarlo, etc.

http://code.google.com/p/google-web-toolkit/wiki/UsingOOPHM

Problema: el código GWT es java y tiene una mentalidad diferente a la presentación de una página HTML, lo que hace que tomar un diseño HTML y convertirlo en GWT sea más difícil

Solución: Nuevamente te acostumbras a esto, pero desafortunadamente convertir un diseño HTML a un diseño GWT siempre va a ser más lento que hacer algo así como convertir un diseño HTML en una página JSP.

Problema: GWT toma un poco de control, y aún no es convencional. Lo que significa que la mayoría de los desarrolladores que se unan a tu equipo o mantengan tu código tendrán que aprenderlo desde cero

Solución: Aún está por verse si GWT despegará, pero si usted es una compañía que controla a quién contrata, siempre puede elegir personas que conozcan GWT o quieran aprenderlo.

Problema: GWT es un mazo comparado con algo como jquery o simplemente javascript. Se necesita mucha más configuración para que suceda que simplemente incluir un archivo JS.

Solución: utilice bibliotecas como jquery para tareas más simples y simples que se ajusten a esas. Use GWT cuando desee construir algo verdaderamente complejo en AJAX, o donde necesite pasar sus datos hacia adelante y hacia atrás a través del mecanismo RPC.

Problema: a veces para completar su página de GWT, necesita realizar una llamada al servidor cuando la página se carga por primera vez. Puede ser molesto para el usuario sentarse allí y mirar un símbolo de carga mientras obtiene los datos que necesita.

Solución: en el caso de una página JSP, su página ya fue procesada por el servidor antes de convertirse en HTML, por lo que puede realizar todas sus llamadas GWT y cargarlas previamente en la página, para una carga instantánea. Mira aquí para más detalles:

Acelera la carga de páginas al pre serializar tus llamadas GWT

Nunca he tenido problemas con el estilo de CSS de mis widgets, listos para usar, personalizados o no, así que no sé a qué te refieres con que eso sea un escollo.

En cuanto al rendimiento, siempre he descubierto que una vez compilado el código GWT es rápido, y las llamadas AJAX son casi siempre más pequeñas que hacer una actualización completa de la página, pero eso no es exclusivo de GWT, aunque los paquetes nativos RPC que obtienes si usas un back-end JAVA es bastante compacto.


Con respecto a GWT 2.4, usa Firefox al depurar GWT, es mucho más rápido que usar Chrome. Y si solo usa Firefox, considere poner esta línea en su archivo project.gwt.xml

<set-property name="user.agent" value="gecko1_8" />

Además, si usa eclipse, agregue lo siguiente en argumentos -> Argumentos VM:

-Xmx512m -XX: MaxPermSize = 1024m -XX: PermSize = 1024m

Puede dividir su servidor y su cliente, y usar lo siguiente bajo argumentos -> Argumentos del programa: -codeServerPort 9997 -startupUrl http://yourserver/project -noserver

Además, para evitar actualizar su servidor en cada cambio, use JRebel http://zeroturnaround.com/blog/how-to-rock-out-with-jrebel-and-google-web-toolkit-gwt/ Y aquí hay una demostración en vivo http://www.youtube.com/watch?feature=player_embedded&v=4JGGFCzspaY


El equipo de GWT hizo una gran cantidad de mejoras en el lanzamiento del GWT 2.7 el año pasado. Una debilidad principal de GWT fue que la compilación lleva mucho tiempo en GWT 2.6 y siguientes. Esto ya no está. GWT no tiene una compilación incremental que es súper rápida y compila solo los cambios.

GWT 2.7 ahora tiene ( Source ):

  • Las compilaciones incrementales ahora solo en segundos
  • SourceMaps más compactos y más precisos
  • Soporte de GSS
  • JSInterop
  • Gran rendimiento de JavaScript
  • Tamaño de código más pequeño

En segundo lugar el comentario de Ykagano, la mayor desventaja es perder la V en MVC. Aunque puede separar la verdadera clase ui del resto de su código del lado del cliente, no puede usar fácilmente una página HTML generada por un diseñador gráfico / web. Esto significa que necesita un desarrollador para traducir HTML en Java.

Obtenga un editor wysiwyg ui, le ahorrará mucho tiempo. Yo uso GWTDesigner.

La mayor ventaja de GWT es que puede olvidarse de los problemas del navegador cruzado. No es 100% pero quita casi todo ese dolor. Combinado con el beneficio de la depuración de modo alojado (a diferencia de Firebug que es excelente pero no es lo mismo que un depurador de Java) le da al desarrollador una gran ventaja en la generación de aplicaciones complejas de Ajax.

Ah, y es rápido en tiempo de ejecución, especialmente si usas un filtro gzip.


Errores con los que me encontré 1. Comportamiento diferente en el modo Superdev. Por ejemplo, Someclass.class.getName () funciona absolutamente bien en modo Superdev y devuelve el nombre completo de la clase. En modo productivo, esto no funciona.

  1. addWidget (widget) llamará a removefromparent () de widget

Estoy trabajando en un proyecto en este momento que usa EXT GWT (GXT) que no debe confundirse con GWT EXT. Hay una diferencia: EXT GWT es la que realmente produce la compañía que escribió ExtJS en la biblioteca de JavaScript. GWT EXT es un contenedor GWT alrededor de la biblioteca ExtJS. GXT es GWT nativo.

De todos modos, GXT todavía es algo inmaduro y le falta una comunidad sólida que creo que tiene GWT EXT. Sin embargo, el futuro es con GXT, ya que es GWT nativo y en realidad desarrollado por la compañía que creó ExtJS. GWT EXT está algo lisiado debido a que la licencia se modificó en la biblioteca ExtJS, lo que desaceleró el desarrollo de GWT EXT.

En general, creo que GWT / GXT es una buena solución para desarrollar una aplicación web. De hecho, me gusta mucho el modo alojado para el desarrollo, hace que las cosas sean rápidas y fáciles. También obtienes el beneficio de poder depurar tu código también. Las pruebas unitarias con JUnit también son bastante sólidas. Todavía no he visto un gran marco de prueba de unidad de JavaScript que me pareció lo suficientemente maduro para probar una aplicación empresarial.

Para obtener más información sobre GWT EXT: http://gwt-ext.com/

Para obtener más información sobre EXT GWT (GXT): http://extjs.com/products/gxt/


GWT 2.0, que se supone que saldrá en algún momento en los próximos meses, resuelve muchos de los problemas discutidos.

  • Cree diseños utilizando una sintaxis similar a html / xml
  • Carga dinámica de scripts: solo se descargará inicialmente el JS esencial. El resto se descargará según sea necesario
  • Modo alojado en el navegador: esto podría ocuparse de los problemas de velocidad del modo alojado discutidos, entre otros beneficios
  • "Optimizaciones del compilador": compilación más rápida, con suerte

Video de vista previa de GWT 2.0 en Google I / O


GWT 2.4 ha solucionado muchos de los problemas mencionados anteriormente y una gran biblioteca de widgets acaba de salir de Beta (Ext GWT 3.0.4, también conocido como GXT), que está escrito completamente en GWT, no en un contenedor de JS lib.

Dolor remanente

  • La falta de soporte selector de CSS3, puede usar "literal ()" en algunos casos para evitarlo.
  • Falta de soporte para CSS3 y eventos modernos de navegador como transitionEnd .
  • Falta de soporte de clase de Java Calendar (muchos años después).
  • Falta de soporte JUnit4 (5 años y contando).
  • Falta de una hoja de ruta clara y un cronograma de liberación del equipo de Google GWT.

GWT es bastante directo e intuitivo.

Especialmente con el lanzamiento de UIBinder para permitir que los widgets GWT se distribuyan en XML y luego se codifiquen en Java.

Entonces, si ha utilizado otras herramientas de diseño Ajax o Flash, o Silverlight, etc., GWT es muy fácil de aprender.

El obstáculo principal, si no es una trampa, es GWT RPC. La razón por la que desea usar GWT es por GWT async RPC. De lo contrario, ¿por qué no simplemente confía en CSS para formatear su página?

GWT RPC es ese elemento que permite que su servidor actualice datos en su servidor sin tener que actualizar la página. Este es un requisito absoluto para páginas como el control del rendimiento del stock (o la deuda nacional y pública actual de los EE. UU. O la cantidad de bebés no nacidos abortados en todo el mundo en el segundo).

GWT RPC toma un poco de esfuerzo para entenderlo, pero dado unas pocas horas, todo debe quedar claro.

Por encima de eso, después de esforzarse un poco para aprender GWT RPC, finalmente descubres que no puedes usar JSPs como el componente de servicio para RPC, a menos que ... Tengo una serie de 8 partes (creo) en mi blog sobre cómo usar JSP como el administrador GPC RPC. Sin embargo, dado que no me ha pedido respuestas sino solo problemas, desisto de anunciar mi blog.

Asi que. Creo mucho que los peores obstáculos para utilizar GWT es descubrir cómo implementar correctamente GWT async RPC y cómo habilitarlo para utilizar servidores JSP.


GWT es una obra maestra de la tecnología. Une la programación del cliente y del servidor convirtiéndola en una aplicación coherente: la forma en que se escribió el software antes de "superponer" y la forma en que debería escribirse. Elimina diferentes conjuntos de habilidades, falta de comunicación entre los miembros del equipo y, en general, toda la fase de diseño web: tanto artística como de programación. Y es lo más parecido que se puede llegar al móvil, por ejemplo, el desarrollo de Android. De hecho, GWT fue diseñado para generar diferentes UI nativas, no solo HTML. Aunque se requiere una disciplina enorme para garantizar ese desacoplamiento, para mantener la presentación de las capas internas, agnóstico.

El primer error que debe evitar, que tardó cuatro años en darse cuenta, es usar extensiones de terceros como EXT-GWT, también conocido como GXT y SmartGWT. Es muy tentador empezar a usar sus lindos widgets de escritorio en lugar de invertir en tu propio estilo, pero no puedo decir cuántos problemas tuve con SmartGWT hasta que finalmente me cansé. En resumen, congela la función GWT central establecida en el cierto nivel (bastante desactualizado) y luego se basa en ella. También tenga en cuenta que el aspecto y el tacto de escritorio cincelado se ven tontos hoy en día, sin mencionar el bajo rendimiento, la gran cantidad de errores y las características de compatibilidad, especialmente en los dispositivos móviles. Desea permanecer lo más cerca posible de los controles nativos del navegador, es decir, los desplegables renderizados como elementos nativos <select>, no algunos controles personalizados.

Gracias a las tendencias de los dispositivos móviles, todo el UX se está volviendo más simple y más plano, por lo que no es necesario hacer mucho para dar estilo a una aplicación de aspecto nítido. Aunque si quieres un aspecto "3D", también hay degradados. CSS3 hizo todo más fácil, y GWT lo envuelve de una forma elegante orientada a objetos a diferencia del CSS sin formato. Así que no te desanimes mirando controles de barebones bastante feos en GWT Showcase. El equipo de GWT intencionalmente no ofreció ningún estilo, porque es el trabajo del desarrollador.

El resto es una programación de navegador bastante convencional en Java fuertemente tipado con hermosas API concisas. Pero, por supuesto, nunca olvida que su código se ejecuta dentro del navegador, por lo que todas las llamadas son asíncronas, por ejemplo, no puede llamar a los métodos GWT-RPC en un bucle (para completar una lista), pero necesita encadenarlos recursivamente si alguna vez llega a este situación.

Hay algunos "antipatrones" autoproclamados como no usar GWT-RPC. Hasta ahora ha sido bueno para mí: durante 10 años. La simplicidad es la clave. No pensaría ni siquiera un segundo en sacrificar algún rendimiento marginal por la elegancia del código y la capacidad de mantenimiento. además de esto no es donde estarían sus cuellos de botella, en la base de datos. Por supuesto, tenga en cuenta la cantidad de datos que está enviando al cliente.

Y si no puede encontrar o modificar el estilo del gadget existente, lea el conjunto rico de elementos HTML5, siempre puede incluir uno de terceros. Lo hice con un popular jQuery FullCalendar. No ciencia de cohetes en absoluto. Todo lo demás, como Google Maps y Google Charts, tiene envoltorios semioficiales de GWT.

GWT es perfecto. La única razón por la que no recibe suficiente amor es porque los primeros adoptantes de Internet que aún influyen en la industria no vinieron de la informática y los lenguajes orientados a objetos para apreciarlos. Tienen antecedentes artísticos (Photoshop / WordPress) o de red (Perl / Python).


GWT hace Sniffing del navegador en lugar de detección de características y su aplicación no funcionará en algunos navegadores (especialmente los nuevos)

Aquí hay algunas referencias del problema:

Aquí hay algunas referencias a la detección de características:

Extraído de la comparación de marcos JavaScript - Wikipedia


He trabajado mucho en GWT recientemente, y esto es lo que tengo que decir:

  1. El estilo de CSS es complicado algunas veces, use la herramienta de desarrollador de IE en IE y Firebug en Firefox para descubrir qué está pasando exactamente y obtendrá una idea clara de qué CSS debe cambiarse.
  2. Puedes usar trucos para que google lo indexe. Un sitio muy famoso es http://examples.roughian.com/ verifique sus calificaciones en google. Un sitio mucho menos famoso es www.salvin.in (no pude resistir mencionarlo), lo optimicé para palabras: página de inicio de salvin (busque en google estas tres palabras)

No sé mucho sobre GWT-EXT, pero yo también soy de la creencia de que no es necesario incluir bibliotecas de terceros.

La mejor de las suertes en su decisión :)


Hemos estado trabajando con gwt por casi 2 años. Hemos aprendido muchas lecciones. Esto es lo que pensamos:

  1. No utilice bibliotecas de widgets de terceros, especialmente gwt-ext. Matará su depuración, desarrollo y rendimiento en tiempo de ejecución. Si tiene preguntas sobre cómo sucede esto, contácteme directamente.

  2. Use gwt para completar solo las partes dinámicas de sus aplicaciones. Entonces, si tiene algunas interacciones de usuario complejas con muchos campos. Sin embargo, no use los paneles que vienen con él. Tome sus páginas suministradas por el diseñador de stock existente. Elimine las áreas que contendrán los controles para su aplicación. Adjunte estos controles a la página en onModuleLoad (). De esta forma, puede usar las páginas estándar de su diseñador y también hacer todo el diseño fuera del gwt.

  3. No construya la aplicación completa como una página estándar que luego construye dinámicamente todas las piezas. Si haces lo que sugiero en el ítem 2, esto no sucederá de todos modos. Si construyes todo dinámicamente, acabarás con el rendimiento y consumirás grandes cantidades de memoria para aplicaciones medianas y grandes. Además, si haces lo que estoy sugiriendo, el botón Atrás funcionará muy bien, por lo que la indexación del motor de búsqueda, etc.

Los otros comentaristas también tuvieron algunas buenas sugerencias. La regla de oro que uso es crear páginas como si estuvieras haciendo una página web estándar. Luego esculpe las piezas que deben ser dinámicas. Reemplázalos con elementos que tengan identificadores y luego use RootPanel.get( id ).add( widget ) para llenar esas áreas.


La mejor forma de obtener datos confiables es de la encuesta gwt . Uno de los mayores problemas con GWT siempre ha sido un largo tiempo de compilación. Afortunadamente, está mejorando muy rápidamente, por lo que no será un problema significativo en el futuro cercano. Otro inconveniente es que GWT es mucho más complicado porque Java es un lenguaje más complicado que resiste a los malos codificadores en cada paso del camino. Además, la compilación agrega una capa. Por ejemplo, js interopera requiere un pequeño texto repetitivo. El problema fundamental es que GWT no fue diseñado para ser simple. Fue diseñado desde cero para aplicaciones web extremadamente complicadas y toda la comunidad prioriza sistemáticamente, el rendimiento, la calidad del código, la arquitectura, etc. sobre la codificación fácil.
Recuerde que puede usar js en GWT en cualquier punto, de modo que si está luchando con GWT, considere usar js. Al final del día, GWT es js para que puedas hacer cualquier cosa en GWT que puedas en js. De hecho, la mayoría de los proyectos de GWT usan js. El problema es que GWT es drásticamente más complicado. Sin embargo, a veces vale la pena la complejidad adicional.

Vale la pena señalar que GWT 3.0 traerá mejoras masivas.


Las trampas con las que nos hemos encontrado:

  • Si bien puede obtener una gran cantidad de millas por usar algo como GWT EXT, cada vez que use este tipo de chapas finas encima de una biblioteca de JavaScript, perderá la capacidad de depuración. Más de una vez me he golpeado la cabeza con el escritorio porque no puedo inspeccionar (dentro de mi depurador IntelliJ) qué está sucediendo en la clase de tabla GWT EXT ... Todo lo que puedes ver es que es un JavaScriptObject. Esto hace que sea bastante difícil averiguar qué ha ido mal ...

  • No tener a alguien en tu equipo que sepa CSS. Desde mi experiencia, no importaba que la persona no fuera experta ... es suficiente que tenga un buen conocimiento práctico y conozca los términos correctos para google cuando sea necesario.

  • Depuración en los navegadores. Esté atento al modo alojado fuera de proceso [ 1 ] [ 2 ] [ 3 ], con suerte en GWT 1.6 ... Por ahora, solo tiene que hacer las cosas bien con el modo alojado, luego use el botón "Compilar / Buscar" , donde puedes jugar con otros navegadores. Para mí, trabajar en Windows, esto significa que puedo ver mi trabajo en Firefox y usar FireBug para ayudar a modificar y mejorar las cosas.

  • IE6. Es sorprendente lo diferente que IE 6 renderizará las cosas. He adoptado el enfoque de aplicar un estilo a la "ventana gráfica" más externa de acuerdo con el navegador para que pueda tener reglas de CSS como:

    .my-style { /* stuff that works most everywhere */ } .msie6 .my-style { /* "override" so that styles work on IE 6 */ }

Finalmente, asegúrese de usar un editor que lo ayude. Uso IntelliJ: tiene mucha inteligencia de GWT. Por ejemplo, si trato de usar una clase que no está manejada por la emulación JRE, me permite saberlo; si especifico un estilo para un widget, y aún no he definido ese estilo, el código se pone rojo y ondulante ... O, cuando miro el CSS, me dirá cuándo he especificado los atributos en conflicto en un regla única (Todavía no lo he probado, pero entiendo que la versión 8 tiene un mejor soporte GWT, como mantener sincronizadas las interfaces e implementaciones RPC "locales" y "asincrónicas").



No hay grandes escollos que no haya podido superar fácilmente. Usa el modo alojado en gran medida. Como está utilizando GWT-ext, casi nunca necesitará tocar CSS usted mismo a menos que desee modificar el aspecto de la caja.

Mi recomendación es usar un widget "nativo" de GWT en una biblioteca donde estén cerca de las características.

Re indexación del motor de búsqueda: sí, el sitio no tendrá normalmente URL navegables (a menos que solo esté agregando widgets a elementos de un sitio web normal). Sin embargo, puedes hacer una función de historial hacia adelante / atrás.


Nos ha costado mucho casar nuestra base de código GWT con plantillas web HTML que obtuvimos de un diseñador web (páginas HTML estáticas con identificadores div específicos que queríamos que administrara GWT). Al menos cuando lo usamos, no pudimos lograr que GWT se integrara con partes de nuestro sitio web que no estaban codificadas en GWT. Lo hicimos funcionar eventualmente, pero fue un gran truco.


Reutilizando objetos de servicio RPC.
Causa condiciones de carrera con síntomas que parecen colgar la aplicación.


Un poco fuera de tema, pero el canal #gwt en irc es muy útil, en caso de que tenga un problema persistente.


Una de las principales trampas es que a veces es necesario asignar explícitamente una identificación a lo que finalmente se convierte en un elemento HTML para poder usar ciertos estilos CSS. Por ejemplo: un TabPanel de GWT solo lo hará: desplácese sobre tabBarItems cuando a la tabBar de tabPanel se le haya asignado un id. Y especifique a: hover en ese elementId.

Escribí sobre otras desventajas de GWT en otros lugares, pero ya están cubiertas por la respuesta de rustyshelfs :).


Utilicé GWT y GWT-ext juntos en un proyecto hace un tiempo. La experiencia me resultó bastante sencilla a medida que avanzaba el desarrollo web, pero mi consejo sería este:

No mezcle widgets nativos GWT con widgets EXT. Es confuso como el infierno, ya que generalmente los nombres son los mismos (GWT.Button o GWText.Button?)

Una cosa que me sucedió que realmente hizo que el código fuera más complejo de lo que me gustaría, era que quería un Panel que fuera a) dinámicamente actualizable b) en cascada

Los paneles nativos de GWT son dinámicos, los paneles Ext son aptos para cascada. ¿Solución? Un GWT.VerticalPanel que envuelve un Panel de GWTExt ... Caos. :)

Pero bueno, funciona. ;)


  • La interfaz Async que debe escribir para cada interfaz de servicio parece algo que pudo haber sido generado automáticamente por el compilador GWT.
  • Los tiempos de compilación se vuelven largos para grandes proyectos

Pero para un gran proyecto de Javascript es la mejor opción