I am not much of a tools person, because I think the most important thing is object-oriented design, which is (or should be) more or less independent of the specific tools that are used.
Having said that, good tools are indispensable if you want to focus your efforts on design instead of the technicalities of a particular technology or on your development environment. I really hate it when I spent time configuring stuff or dealing with technical problems that are not part of the real problem that I want to solve. One big problem in this respect are the technologies for developing web based user interfaces. In the past I have used plain JSP and servlets, struts, java server faces, and Tapestry, with the last being the most successful to date. Also, a recent experience of mine with JSP based development confirmed the idea again that using JSP somehow is like assembly programming.
So I decided to upgrade one of my projects from Tapestry 3 to Tapestry 4. Now, forget it. Huge amounts of compilation errors, and a total redesign of Tapestry which would require a redesign of the application. In this case, one would expect good documentation to help you. Again wrong, where are the migration guides? Leaving people completely in the dark to deal with major changes is not nice. They claim to have simplified the framework, yet they have introduced a dependency on another new framework (Hivemind I believe), a framework a-la Spring, where unfortunately knowledge of that framework is required to use tapestry.
So Tapestry is out, what next? I already looked at Wicket some time ago and I liked the concept very much, so I decided to use that for a new project: the trackdetective. Compared to Tapestry, Wicket implements basically the same concept but in a much cleaner way, requiring very little framework knowledge, and basically without any configuration files (you don’t need them!). In other words, the conceptual surface (as they call it) of Wicket is very small. Wicket, being a relatively new framework, there are no written books on it yet (although Pro Wicket will appear this month (for Wicket 1.2)), and Wicket in Action is being written (focussing on the upcoming wicket 2). Fortunately, the web site itself is really good and they have a quickstart application so I downloaded that. Now this was a special experience. I looked at the web.xml and there it was, a very simple web.xml with a servlet, a servlet config param for a web application class, and a servlet mapping. Couldn;t be simpler. The configuration parameter points to the quickstart application class which extends WebApplication (sounds logical), this class has a method getHomePage() which returns Index.class (also sounds logical), and provides access to a factory for creating (typesafe) Session objects for storing information in session scope. Try doing this with any other web framework and I guarantee that you will get lost right away.
And as it turns out, the deeper you dive into the framework, it simply stays logical. For instance, today I found two issues with Spring integration and managed to solve them myself. After reporting them on the mailing list, a few hours later the changes were already incorporated into subversion. This user community is really good.