Java Web Frameworks - Toly

Spring MVC
Would be a good choice for the most of your needs
- Binding / Validation is done just right – clean, testable, reusable
- Multiple View options ( PDF, XML, Excel, Atom, etc… ) done easy [AbstractExcelView, AbstractFeedView, AbstractJExcelView, AbstractPdfView, AbstractUrlBasedView, AbstractXsltView ]
- Annotation based – no XML madness, and very clear when looking at the code – check the Pet Clinic in Spring 3.0 M3
- Integrates with Spring JS very nicely ( in case needed )
- Handing requests and parameters with ( Spring ) expression language – quite flexible
- In Sping 3, MVC is actually REST aware (GET, POST, PUT, DELETE)

+++++++
Wicket
Interesting to look at – no XML, no JSP (JSTL), just Java and HTML. Can mimic a flow in a WebPage object. Better separation of concerns than, for example, in GWT (e.g. no Javish CSS, etc.). Good Community
The only thing that is off is your dynamic HTML elements are done in Java

+++++++
Spring Webflow
Yes – it is a separate beast. It mostly is good, and makes sense, however, in practice, once you need to do something a bit more complex that a shopping cart or a hotel booking app (hint, hint), you can run into problems. “Back button” and “Double click” are not very well handled by the framework, may get an exception while bookmarking (there is a magic recipe, but far from being simple, and intuitive), sharing data across the flow, last resort error handling are not simple, etc.

+++++++
Stripes
Good / simple (no XML – conventions), but not very actively maintained – hence not as mature. (good community though) Worth to look at for simple projects.

+++++++
Struts
Just architected wrong from the very beginning: Validation (XML – why? What about minimum search criteria, what about several, what about nested OO validators!?) / 0 for NULLs / Multi Action Forms / Testing (without StrutsTestcase) / etc. ) Improved a bit since WebWork merging, but still lots of “code smells”.

+++++++
JSF
Quite hard to keep up with all these JSF based JSP tags + integration with security is not simple + full JSF solutions are usually Frankensteins with many pieces from different vendors.

+++++++
Tapestry
Not bad, actually make sense, when you get it. But have you ever looked and tried to follow the Tapestry code? – Very complex implementation, if ever need to look inside the code + Tapestry does take time to learn, so forget about a new off-shore team, or fresh out of college not so geeky grads, taking it on.

+++++++
ZK
Things I liked:

1. It is simple and very feature rich
2. Binding and validation
3. It allows you to choose between XML or code.

Things I did not like:

1. It is not free unless the project is open source, so it requires me to sell it to the client before using it on a project.
2. It generates HTML and Javascript, so on case there is any modification needed for certain browsers, framework needs to be hacked by developers. I only used it for my pet projects (never on a client site), however I remember having some rendering problems (JS – spacing, funny looking page before “ZK” completes the page load, etc.), I take it as a temporary issue, since the framework is improving.

(Again, I am not a ZK expert)

+++++++
anyFaces (iceFaces, richFaces, etc..)
I personally never had a smooth experience with them. They extend JSF to some extent, and provide some proprietary tags, but figuring out some simple things as “how to pass parameters to so and so action” may take some time. For me xyzFaces are code smells. I have not had a chance to look at Spring Faces, so may be Spring made JSF a bit better.

+++++++
HybridJava
since I’ve never used it. From what I read from the main page, one point that I found awkward is “Unlike some other technologies View, Controller and session-persistent data belong to one and the same class instance which is good for performance”, but again, maybe I need to read more about the overall HybridJava philosophy to understand the benefit of coupling V and C (and M?) together.
It would really help if you guys put some design effort on http://www.hybridserverpages.com/, to make it a bit easier for the eyes to get. + although I think “HybridJava.doc” is great (still reading it) – cmmon, a DOC file with code? Basically what I am saying is – run this DOC file though some wiki generator, and have your self a wiki – that would help other comers to hybridserverpages.com.

+++++++
Vaadin (previously IT MILL)
Vaadin is great, I like it. Have not used it for projects, but as a Grails plugin, and it is cool, but I would not say it is a full blown Java web framework. That does not mean it has to be, but the title was “The Best Java Framework”

+++++++
GWT
I like it, but it is too much “view logic” in Java, with HTML5 it just does not seem like a right direction.

+++++++
Echo