JSF is just the view layer of the MVC and wil need to be used with other technologies like Spring/Hibernate or EJB for a full MVC.
Spring (not the Spring MVC) is the controller layer of the MVC and as I say can be used with something like JSF (Struts, JSP/Servlets etc) and something like Hibernate.
I have been using the Spring MVC for about 6 months now, whilst it's probably not the latyest version of SpringMVC I've found it a little annoying that we have so much XML to deal with. All the managed beans and DAO has XML config to it. Also everything seems to have to go thorugh a method called onSubmit().
JSF with something like EJB is far simplier in my opinion...
Everything can be done using Annotations so simply use @ManagedBean=theBean in your backing bean and in your JSF put {thebean.param} and you have access to the backing bean's data.
Also you can use the Session beans of your EJB as the backing beans for JSF then have direct acces to the DAO (Model layer) Entity bean.
Again simply by using the @Entity annotation and the EntityManager class
Also I like the way you are free to set your own action methods so you can have a method in your bean called TheBean.addDetails() and call it in the JSF with theBean.addDetails() rather than everything going through one method as with the Spring MVC.
JSF as I say is just the view layer of MVC, personally I like using it with EJB as this gives you the full MVC all from within Suns J2EE.jar so there are no issues with making sure you have the correct versions and no configuration required.
JSF 2.0 is far suprior to JSF1.2 which always felt like half a job as with EJB3.1 which is nothing like EJB2.x and is far better than EJB3.0 even.
For me JSF2.0 with EJB3.1 is so simple and easy to develop with and everything is very transparent.