My last project that I finished was JSF + Spring + Hibernate on Tomcat 5 similar to AppFuse foundation, but using JSF. Matt has done some JSF + Spring work for the Spring book, and for a client. JSF is not part of AppFuse yet. I think once it is, he might have a different opinion.
I really dig JSF. I found it a lot more productive than Struts. I was amazed how fast I could crank things out. At the time, I did the project the JSF Spring integration was not working well so I skipped it. I used a base class for my JSF backing beans that looked up their corresponding business delegates. Other than that road bump, things went really well. JSF exceeded my expectations.
Now I cheated a bit. I wrote a JSF course and taught it several times before I worked on a JSF project. I also worked on a few small iterations on a few projects before doing an entire project in JSF (small project but still). I also consulted and helped architect a few JSF applications before I wrote one on my own. So.my experience...
The learning curve may be stiffer for starting out. When I wrote the course there were not any good JSF books out yet. Writing a course is a good way to learn how to do things. I improved the course based on my project experience, re-reading the spec., and reading every JSF book published. David Geary's book is an excellent reference, and I highly recommend it.
So how did my first project with JSF go....? My guess is that the same project would have taken twice as long if I did it with Struts instead of JSF because it was a fairly rich application (custom sorting, post backs to populate list boxes, auto populate fields based on user actions, etc.). JSF is much more natural than Struts. I think WebWork, and Spring MVC are improvements on Struts Model 2 MVC, but I have been bitten by the event-driven bug. The only other framework I would consider using instead of JSF would be Tapestry. In short, I dig JSF.
Apparently it is popular to bash Sun and J2EE. JSF does not deserve it.
I still respect Matt's opinion, and I am very grateful for AppFuse.
For me the killer stack is JSF + Hibernate + Spring. The verdict is still out on Tapestry (I need more experience with it).