As far as I know, Wicket comes from the same roots as Tapestry, but technically it is less efficient, i.e. it is less useful for an application where scalability is important. Tapestry 5 takes a special care of scalability, amongst other things.
Comparing even a few frameworks is a huge task. I've written an MSc dissertation comparing Tapestry 3, JSF and Struts, but that was almost three years ago. If you want to have a look at it, here is the link.
Alexander Kolesnikov<br />Java Web Developer<br />SCJP 1.4, SCWCD 1.4, SCBCD 1.3<br /><a href="http://sundraw.ws" target="_blank" rel="nofollow">Tapestry 5: Building Web Applications</a><br /><a href="http://sundraw.ws/batik.jsp" target="_blank" rel="nofollow">Java Drawing With Apache Batik</a>
Alexander Kolesnikov, My first question for any web framework is always, "Why would I want to use this instead of Struts 1.x?" That dissertation looks like a fantastic sales pitch for Tapestry, I will probably read the entire thing. Thank you very much for providing it.
I am not, by the way, a huge fan of Struts 1.x. I simply already know it, so I don't have to worry about any learning curve.
Joined: Feb 26, 2005
The dissertation isn't a sales pitch, it was a discovery of someone who used to work with servlets and JSP.
Struts can be seen as the most popular actions-based framework, while Tapestry is the most user-friendly components-based framework. And the difference between actions and components is evolutionary, similar to the difference between procedural and object-oriented programming.
From my point of view, the fact that Java web frameworks are still mostly action-based is a sign of some stagnation in the Java camp.
I was reading FAQ at Struts 2 website recently, and there was an opinion that Struts 2 is good for web sites - i.e. pages with mostly static content, like blogs - while component-based frameworks are better for web applications, something highly dynamic with complex interfaces. I would agree with this.
And the difference between actions and components is evolutionary, similar to the difference between procedural and object-oriented programming.
As you have rigthly pointed out the component based frameworks improve reusability. For example one could build up a standard glorified table component with check boxes, sorting, row based action button, style etc and can keep reusing that in a number of other pages and projects. This will improve the developer productivity as well as standardization of the look and feel and end user experience.
Also component based frameworks have a number of design advantages over action based ones like clear separation of navigation rules, loosely couples your model, more scalable, reusable and maintainable.