JSF 2.0: A Report from the Trenches
I have given several JSF 2.0 training courses in the USA in the last several months, and I also gave a talk on JSF 2.0 at a large conference in Bangalore India. For the most part, the US short course students were from healthcare and aerospace companies, but I taught some public courses where there was a smattering of students from other fields. Almost all of them were already starting or about to start some real-life JSF 2.0 projects.
So, I thought I would pass on general reactions and trends among my students and clients. The short courses in particular represent only a few companies, so trends there may not be representative. YMMV.
1) Overall: generally positive reactions. In general, the reactions were extremely positive. Some of the students had low opinions of JSF 1.x (either from direct use or from word-of-mouth), and came in with low expectations. Almost without exception, they went away pleased with JSF 2.0. Several commented that it was much better than they had expected.
2) Other frameworks. At the conference, there were a few zealots for other frameworks. After the talk, one person said "Oh, Wicket is 10 times better than JSF 2". And another said the same for ZK, and another for Tapestry. I have no doubt that there are many very good features of those other frameworks, but my response to their comments was this:
3) Struts 2 vs. JSF 2. To my surprise, I got a number of comments from Struts 1 users that thought they should move from Struts 1 to JSF 2, rather than to Struts 2. I probably have much too small of a sample size to know if this is a general trend.
4) Wanted Eclipse support. These courses were taught with Eclipse 3.5, and several students complained about the lack of support in Eclipse for the facelets tags and for the faces-config.xml file. It was also a pain in the neck to manually copy in the JAR files (jsf-api.jar, jsf-impl.jar, jstl-api.jar, jstl-impl.jar) and the web.xml entries for each new Dynamic Web Project. (And, copying/renaming Dynamic Web projects in Eclipse is buggy because references to the old project name are left in the new project.) I'll make a followup posting soon about Eclipe 3.6 (Helios) support for JSF 2.
5) Most were deploying on a servlet engine. Most of the students said that they were deploying on Tomcat 6 or 7, or another servlet engine. One said that they were deploying on JBoss 6. None of my students said that they planned to use Glassfish 3.
6) Lack of richer builtin components. One of the things the students liked was that they could shop around for rich third-party components from IceFaces, RichFaces, Tomahawk, and so on. However, several said that they thought more rich components should have been built in. In particular, the lack of any components or libraries that linked to databases was mentioned several times.
7) There was a lot of confusion about why they got ViewExpiredExceptions when they were not using any session-scoped data. This was during development where they would just let a page sit around for a long time and come back to it later. I didn't know a simple way to prevent this (I know about using error-page in web.xml or exception-handler-factory in faces-config.xml, but that is far too complicated for beginners).
8) Everyone loved facelets templating. Even those who had used Struts Tiles before thought it was great.
9) Everyone loved composite components. They thought this was one of the best features.
10) Most people loved the integrated Ajax support. However, some thought that it was too hard to add in Scriptaculous effects or jQuery-based highlighting if they wanted to customize how the updated DOM entries were displayed. I probably just need to understand better how to use onevent. I gave examples of using it to show "working" messages, but not for customizing the updated DOM entries.
11) People generally liked using annotations to declare managed beans. They were much more split about whether implicit navigation was a good idea, or if explicit navigation rules in faces-config were better. I am sure my personal biases leaked through, since I feel that for real projects, explicit navigation rules are better.