JSF is too fat, Struts is too heavy, Spring MVC is light, but Java is too verbose. Then there come Groovy language and Grails framework.
Hate Java, love Groovy; wish Struts to die quickly, hope long live Spring MVC.
Grails is actually Spring MVC application in disguise.
groovy is an awesome language btw :)
Depends on the application design and development required. For a small team to develop a web based app, counts on what resources you already have, RoR and Grails all can do the tricks. To do things official way, I mean Oracle way, JSF is choice. For hardcore and performance demanding app, you have to go with low level assemble language like i.e. Java :-)
No idea of Django and Python framework Marty mentioned. My point is stay with mainstream, less business risk.
I wrote about this way back when (http://martin-paulo.blogspot.com.au/2011/04/naked-server.html)
and it would appear that others are coming around to my point of view :) (http://caines.ca/blog/programming/the-sun-is-setting-on-rails-style-mvc-frameworks/)
It might sound counter intuitive, but for hardcore and demanding web apps, you need to go with a low level assembly language like JavaScript, and a skinny, naked, server IMHO!