Personally I think that this approach is also more intuitive because HTML is after all the ideal markup language for web UIs.
A problem that arises from this approach is when your application has enabled history support. For example, a real-estate application that shows details for a house would construct a URL such as http://en.bazarooma.com/#451 in order to display the detail page for entry 451. Ideally, when directly typed into the address bar, the browser would show the page without first going through the initial page but in the approach I just described that is exactly what would happen:
1. Initial page is loaded with the first form’s HTML
The solution is an extension over the principle:
1. The initial HTML contains markup for all forms
2. All forms are per default invisible (via CSS)
[update 04.04.2012] There are some pitfalls though: This technique works fine for all widgets that provide a wrap(element) method with a prominent exception being the Hyperlink class – I had to copy & paste one and extend it accordingly. Also note that when using composite widgets (think of panels containing other widgets) you have to first wrap children and then the parent container, otherwise RootPanel will throw an exception about the widget’s parent belonging already to the widget hierarchy. There is also a problem with HtmlUnit regarding links and history handling I’m discussing in this post .
We implemented this technique at Bazarooma so feel free to test it out and get a feeling of how it works.
 Missing history update when clicking on links in GWT and HtmlUnit unittests