JSF - это только слой с видом MVC и должен использоваться с другими технологиями, такими как Spring/Hibernate или EJB для полного MVC.
Spring (не Spring MVC) - это уровень контроллера MVC, и, как я могу сказать, можно использовать что-то вроде JSF (Struts, JSP/Servlets и т. Д.) И что-то вроде Hibernate.
Я использую Spring MVC около 6 месяцев, хотя это, вероятно, не самая латентная версия SpringMVC, мне было немного досадно, что у нас так много XML. Все управляемые компоненты и DAO имеют XML-конфигурацию. Кроме того, все, похоже, должно пройти метод, называемыйSubmit().
JSF с чем-то вроде EJB гораздо проще, по-моему ... Все может быть сделано с помощью аннотаций так просто использовать @ ManagedBean = theBean в вашем бэк-боба и в вашем JSF положить {thebean.param} и у вас есть доступ к данным бэк-файла. Также вы можете использовать Session bean-элементы вашего EJB в качестве бэкэнда для JSF, а затем иметь прямой доступ к компоненту Entity компонента DAO (Model layer). Снова просто с помощью аннотации @Entity и класса EntityManager
Также мне нравится, как вы можете устанавливать свои собственные методы действий, чтобы вы могли иметь метод в своем bean-компоненте под названием TheBean.addDetails() и называть его JSF с Bean.addDetails(), а не все, проходя через один метод, как с Spring MVC.
JSF, как я уже сказал, это просто уровень представления MVC, лично мне нравится использовать его с EJB, так как это дает вам полный MVC из Suns J2EE.jar, поэтому нет проблем с тем, чтобы убедиться, что у вас есть правильные версии и никакой конфигурации не требуется.
JSF 2.0 намного превосходит JSF1.2, который всегда ощущал половину работы, как и EJB3.1, что ничем не отличается от EJB2.x и намного лучше, чем EJB3.0. Для меня JSF2.0 с EJB3.1 настолько прост и прост в разработке, и все очень прозрачно.
Вы действительно хотите сравнить «Spring MVC с JSF 2», а не «Весна с JSF». – BalusC