I have been having fun with Tapestry for the last couple of days. It really is a breath of fresh air compared to some of the Other frameworks.
Although request-based frameworks allow you to get the job done... and there are some good ones out there (WebWork 2 is great)... I am really enjoying a more component/event-driven approach.
A long long time ago, in a galaxy far far away I remember writing a web templating system. One of the major goals was that the HTML "templates" should be WYZYWYG/browser preview friendly. This was very much needed based on the way that we built websites, and how the designers were in the process.
Ever since then I have shed a tear or two when I see lots of evil markup which makes a system non-web designer friendly. JavaServer Faces unfortunately seems to take the cake on this one with its <f:use_faces> .... and just check out a table based on facets!
As soon as you start to work with components, this holy grail becomes hard to find... however I really like that Tapestry tries hard at this goal.
There are definitely cons to this approach. You could argue that having a conditional look like:
<span jwcid="@Conditional" condition="ognl:isFun">foo</span>
isn't as easy to view as:
#if ( isFun )
bar
#endif
However, being able to have real HTML makes it worthwhile, and after a few minutes you can get it.
Having this HTML approach is just one thing that I like. What I really like is how the I can't put code in my view, and how the low level servlet stuff is just really hidden nicely. This is great stuff. Thanks Howard.