Bottom line is I don’t normally like frameworks. But I like Tapestry.
This is what I typically hear from people who use Tapestry. It’s an awesome flexible Java application framework which uses the concept of reusable componenets throughout the entire system. It scales well, deals with internationalisation easily, has masses of code reuse because of the components and has great error reporting. Some people have compared the way it works with the fundamentals behind Swing, and they’re not necessarily far wrong. What is true is that its learning curve is much steeper than that of other Java frameworks I’ve used (ok, was, when I was learning it about 18 months ago), but the mailing list support is excellent, there’s an active wiki, and the lead developer, Howard Lewis-Ship has published a book (as well as having a blog), so there’s no real excuse to not at least take a look.