I started with JSF (1.1 and 1.2) and it was so painful that I decided to change in next projects. I researched a bit and I decided to try Wicket, and it was so a pleasure.
Also I've tried JSF 2 but is still the same thing.
Both of them are component frameworks, but things with Wicket are easy while with JSF are a complete mess.
Wicket over JSF:
- In Wicket HTML are HTML. JSF has its own mark-up tags. The h:dataTable (for tables) is nonsense. Believe me, Sun Engineers had to be drunk when designed it.
- In Wicket things like security,
- With JSF the navigation bar shows the previous URL. Really odd.
- JSF seems to me very heavy, and with libraries like Rich or Prime even more.
- Sometimes, it seems impossible to know which is happening. You always end up yelling at your computer because you don't know why JSF is doing.
JSF over Wicket:
- In Wicket you're going to write more Java (the binding with HTML). At least, your IDE will provide refactoring and validation support.
- Resources management in Wicket is a bit tricky.
- There are much more documentation and support for JSF
One common flaw is that session size is are problem (because graphical components are stored in there).
All in all, if you have to decide only between Wicket and JSF there not doubt for me, Wicket.