I've used CGI, PHP, JSP, Struts, Spring MVC (1.2), Bea workshop, JSF, JBoss Seam, Spring MVC (2.5) and Wicket (in that order). I've noticed a jump in both productivity and quality for each new technology I've worked on. It just works better, It feels better. I prefer Wicket (with a twist of spring, quartz, etc.) over all of the others. I can honestly say I saw the light, and I don't want to go back to a darker -- or lighter ;) -- side.
There is a lot to say about Wicket.
- Conversational support (or tab-enabling) comes by default, you do not worry about "open in a new tab" and "back" button problems ever again.
- It is component-based, so you can re-use code ala swing.
- Leverages a lot of the standard Java, like the type safety wonders.
- Supports advanced security features like url encryption.
- Clusterizable applications by default.
- And, most important, it is fun to use.
There is a lot to improve for JSP and JSF.
- The one thing that bothers me the most is the "EL" nonsense, for I believe it breaks the nice java type safety and strength.
- Both need tooling support for high productivity.
- You need another framework on top of both of them to really solve the problems (as seen with seam framework, which makes JSF usable).
- The error handling is very tricky and the exceptions are not straitforward helpful.
- It is difficult to make reusable components on both frameworks and doesn't support a proper model for separation of concerns.
- ... and, most important, a long etc of minor pains, like this, or this.