Apples to Oranges.
Spring is an application framework that integrates dependency injection, aspect oriented programing and several other things in one stack. Its rough apples to apples comparison would be J2EE.
JSF is a view layer technology, built on the Model View Controller paradigm. Its rough oranges to oranges comparison would be Spring MVC. Both can use different View technologies (ie. Facelets, JSP, Velocity, etc.) and both integrate extremely well into their respective stacks.
-- In response to the new question --
I've used JSF2 a fair amount (as much as anyone can given its young age) and I find it to be a very good framework. It fixes a lot of the shortcomings of JSF 1.2 and I felt that JSF 1.2 was a good match for me too.
I've not used Spring MVC much but I have looked at some code that another developer has done.
My (very) limited experience is that Spring MVC feels slightly more like an "action" framework while JSF feels more like a "component" framework. I, personnaly, think that the component-esque frameworks are a more natural extension of OOD, which appeals to me and the way I write software.