Mitch Pronschinske is a Senior Content Analyst at DZone. That means he writes and searches for the finest developer content in the land so that you don't have to. He often eats peanut butter and bananas, likes to make his own ringtones, enjoys card and board games, and is married to an underwear model. Mitch is a DZone Zone Leader and has posted 2576 posts at DZone. You can read more from them at their website. View Full User Profile

What's New in Smart GWT 2.2? - GWT I/O Sessions

06.02.2010
| 14788 views |
  • submit to reddit
The recent release of Smart GWT 2.2 is significant for users of Google's Web Toolkit.  The significant addition of Selenium testing, along with other features, was a welcome update for RIA developers.  As GWT's popularity grows, developers are finding more innovative ways to use it and Google is providing more tutorials on GWT development.  This year's Google I/O had an unprecedented number of GWT-focused sessions.

Smart GWT 2.2

A newly-included Selenium user-extension and IDE are prime new features in Smart GWT 2.2.  Selenium, the popular cross-browser testing and recording tool, is even more empowered in Smart GWT through the scLocator, which is a locator strategy specifically for Smart GWT.  Sanjiv Jivant's announcement says it's an XPath-like version of Smart GWT components, but easier to use and cross-browser compatible.  

scLocator for a ListGrid cell:
//ListGrid[ID="itemList"]/body/row[itemID=1996||itemName=Sugar||2]/col[fieldName=SKU||1]
The code is much more human-readable and the locator supports fallback strategies for acceptable data changes in testing data.

Another neat new feature is the prototype pattern for specifying the default attributes of a Canvas or subclass (there's no need to create a separate hierarchy of subclasses).  This feature is special because most Java-based apps can't support it.  It works by creating a prototype instance of a Canvas or subclass and then setting the default bean properties for future instances of a given class.  You pass the prototype instance as the argument when you call the static method setDefaultProperties().  Jivan shows an example where a prototype instance of ListGrids are set to not support column grouping by default:
 public class MyApplication implements EntryPoint {  

public void onModuleLoad() {
//create a prototypical ListGrid instance and set the new defaults
ListGrid prototypeGrid = new ListGrid();
prototypeGrid.setBaseStyle("myGrid");
prototypeGrid.setCanGroupBy(false);

//apply the prototype to the ListGrid class
ListGrid.setDefaultProperties(protypeGrid);

...
...
//this grid will now have baseStyle="myGrid" and canGroupBy=false as defaults!
ListGrid stocksGrid = new ListGrid();
...
...

}
}

Here are some of the other major features in Smart GWT 2.2:

  • DateRangeItem, MiniDateRangeItem and Relative Date support for DynamicForm
  • Dropdown multi-selects
  • Javadoc enhancements : Over 200 API's have an overview and relevant Showcase sample in the @see link of the API docs
  • Eliminated the need for isomorphicDir variable in the host HTML file
  • i18n enhancements
  • ListGrid performance improvements
  • Better strict and transitional Doctype support
  • Several new Showcase samples

The next release will have a new lightweight theme and Getting Started documentation.  Check out some Smart GWT 2.2 demoes under 'new samples'.

Google I/O

Here's a list of the in-depth (and now available!) GWT session videos at Google I/O:

  • Measure in milliseconds redux: Meet Speed Tracer - Kelly Norton is back for round two to demonstrate what milliseconds of latency means to end-users, as well as how to identify the sources of latency within your app using Speed Tracer.
  • Faster apps faster: Optimizing apps with the GWT Compiler - Have you ever wondered how you can speed up your GWT compiles? If so, follow along with Ray Cromwell as he delves into this topic, as well as other tips and tricks that you can use to streamline development with GWT.

  • Architecting for performance with GWT - Last year we announced Google Wave, a cutting edge web app that introduces a new way of collaborating and communicating. This year Wave team lead Adam Shuck, and GWT UI guru Joel Webber share with everyone the optimizations both teams use when building GWT-based web apps.
  • GWT Linkers target HTML5 Web Workers, Chrome Extensions, and more - GWT has some extremely interesting technology under the hood, and Matt Mastracci, CTO of dotspots, knows this as well as anyone else. For this year's I/O he provides an overview of GWT linkers, as well as how they created a one that turns a GWT module into an HTML5 Web Worker, and one that generates an HTML App Cache manifest automatically.
  • GWT's UI overhaul: UiBinder, ClientBundle, and Layout Panels - GWT 2.0 shipped with some major UI enhancements that make it very easy to speed up your app, decrease load time, and control layout. In this session, Ray Ryan and Joel Webber show you how these new features interact with one another, and how you can use them to create the most optimal web app.

  • GWT + HTML5 can do what?! If you missed the YouTube video of Quake II running in the browser, this session not only replays it, but goes into great detail as to how the three Googlers actually made it happen using HTML5 features such as WebGL and WebSockets.
  • GWT testing best practices - In 2009, Ray Ryan gave a talk on how to architect a GWT app using the MVP design pattern. This year, Wave's Daniel Danilatos follows-up on Ray's talk, with a detailed overview of how to remove the pain of testing GWT apps using the MVP architecture.

  • Architecting GWT applications for production at Google - If you haven't noticed, it's required that at least one of Ray's talks has the word "Architecting" in it. The good news is that his talks live up to their titles, and this session is no exception. Not only does Ray evolve the concepts discussed in his 2009, "Best Practices for Architecting GWT Apps", he dives into some of the upcoming GWT 2.1 features, and invites Ben Alex, from VMware, on stage to talk about the integration between Spring Roo and GWT.