The past days I have digged deep into Wicket and spent a little less time into Cayenne. After I have managed my first steps I must say I am impressed. Both frameworks are really good and easy to learn. Wicket can be done within 3 days and Cayenne only needs a half day, then you can work with the basics and start a productive life. Of course you are not an expert but with some of the excellent blogs and the very nice community in both projects you can use everything pretty quickly.
On Wicket side I have learned quickly that you still need to write some code. The current hype tells you Wicket is like magic - everything done within 5 minutes. But in fact you have to do some work yourself. But the Wicket way of working is really nice and are much more agile than with for example Struts. Struts has a pretty procedural of thinking about web apps. Wicket is a more object oriented way. Once you have learned this difference, you are in the game.
To have a great Wicket experience you should make use of the Spring IOC container (or Guice). Wicket prepares some stuff for you and it’s very easy to integrate Spring. But even if you want to make a small application you’ll probably need it. At least for configuration management or injecting your DAOs or whatever. In my case I tried to avoid Spring to keep everything as easy as possible, but finally I gave up - some stuff is so much more easy with Wicket/Spring combination.
Wicket is not very good documented. People say, it’s to flexible to document proper. I cannot agree - look at the Spring Framework, it has a good documentation and is very flexible too. I admit it might be difficult, but it’s possible. Lucky us, there are tons of examples at the trunk and several writers run excellent blogs. I work with the new version 1.5. There is not too much information but there is a good migration page from the Wicket team which helps lots. However, please prepare to check out your versions code and look into it at a regular basis. I strongly believe that implementing Wicket without sourcecode is not so much fun. In my case, I now use the trunk version to develop and debug. Trunks are of course not recommended for production, if you are not following the recent development work, go with a tagged and stable version.
Localization is a charm. There are several ways to do it, but all of them are very good. Finally it’s very easy to move the whole localization strings into a database. 100 points here.
Something I really needed some time was the whole RequestCycle and of course the Models. It was not easy to understand if you come from more the Struts-World. But after a while you can understand so huge benefits, especially when you think on all the clustering.
After all, Wicket has caught me. I am pretty sure I will have some pain as with other frameworks, but the benefits are to big to ignore. I even could integrate Cayenne within only a few hours - and I had no clue about Cayenne before.