Сравнение JSF со Struts похоже на сравнение яблок с апельсинами. Struts - основанная на запросе / действии инфраструктура MVC, а JSF - основанная на компонентах инфраструктура MVC. Struts также в возрасте. В ИТ вы должны продолжать двигаться. Как правило, основанная на компонентах инфраструктура MVC рассматривается как дальнейшее развитие инфраструктуры MVC, основанной на запросах / действиях.
JSF в настоящее время уже используется очень широко. Он действительно получил много критики раньше. Вы можете прочитать о большинстве из них в вопросе Каковы основные недостатки JSF 2.0? Преимущество JSF состоит в основном в поддержании стандарта Java EE и доступности относительно большого количества сторонних библиотек компонентов ( PrimeFaces , RichFaces , IceFaces , OpenFaces , Томагавк и т. Д.). С JSF очень легко разрабатывать CRUD-приложения и веб-формы с хорошим внешним видом и быстротой.
Однако когда он входит в комплекс, JSF может вызвать некоторые непредвиденные сюрпризы. Хотя спецификация JSF и эталонная реализация (Mojarra) являются достаточно зрелыми с момента последних сборок 1.2, вы можете столкнуться с некоторыми очень специфическими поведенческими проблемами, которые противоречат вашей интуиции. Некоторые из них просто «разработаны» и могут быть поняты только тогда, когда вы детально поймете , как JSF работает под прикрытием, что, в свою очередь, часто сводится к природе HTTP-протокола без сохранения состояния. JSF абстрагирует его по сути «слишком много», так что вы больше его не видите. Некоторые из них являются просто ошибками в используемых сторонних библиотеках компонентов, но это, таким образом, не строго зависит от реализации JSF. Однако обработка ошибок / проблем довольно хороша в большинстве основных библиотек компонентов - если вы своевременно сообщаете об ошибках.
Что касается Ajaxical, JSF 2.0 действительно обеспечивает очень небольшое ручное управление для ручного запуска Ajaxical запросов и управления деревом представления как на стороне сервера, так и на стороне клиента. Просто потому, что это основанная на компонентах инфраструктура MVC, которая поддерживает древовидное состояние с обеих сторон. Вы должны принять во внимание обе стороны, когда берете аяксические работы в свои руки. Если вам действительно нужно больше свободы в действиях, основанных на ajax / request, то основанная на компонентах инфраструктура MVC - просто неправильный выбор. Вместо этого вы должны выбрать MVC-среду, основанную на запросах / действиях, например Spring MVC, Struts или Stripes, вместе с библиотекой JS, такой как jQuery. Однако вместо этого вам придется самостоятельно писать множество шаблонов HTML / CSS / JS.