Зачем нужен JSF, когда пользовательский интерфейс может быть реализован с помощью библиотек JavaScript, таких как jQuery и AngularJS?


116

Я читал о JSF, который является фреймворком пользовательского интерфейса и предоставляет некоторые компоненты пользовательского интерфейса. Но чем он лучше или отличается от количества компонентов, доступных из jQueryUI, AngularJS, ExtJS или даже простого HTML, CSS и JavaScript.

Зачем кому-то изучать JSF?


3
Преимущества серверного HTML: возможность поиска в поисковых системах, скрытие просмотров на основе авторизации. в противном случае мы отказались от него в пользу чистого пользовательского интерфейса ajax.
Нил МакГиган,

5
Я также отказался от JSF в пользу бэкэнда AngularJS + RESTful. (Яблоки и апельсины, но Angular настолько хорош, что мне не нужны многие из преимуществ JSF)
arg20

JSF - это инфраструктура MVC на основе компонентов, которая построена на основе API сервлетов и предоставляет компоненты через библиотеки тегов, которые можно использовать в JSP или любой другой технологии просмотра на основе Java, такой как Facelets.
Divyesh Kanzariya

Ответы:


154

JSF для простого JSP / Servlet / HTML / CSS / JS похож на jQuery для простого JS: делайте больше с меньшим количеством кода. Чтобы взять PrimeFaces (на основе jQuery + jQuery UI) в качестве примера, просмотрите его витрину, чтобы увидеть полные примеры кода. BootsFaces (на основе jQuery + Bootstrap UI) также имеет витрину с полными примерами кода. Если вы внимательно изучите эти примеры, то увидите, что вам в основном нужен простой класс Javabean в качестве модели и файл XHTML в качестве представления.

Обратите внимание, что вы не должны рассматривать JSF как замену только HTML / CSS / JS, вы также должны учитывать серверную часть (в частности: JSP / Servlet). JSF устраняет необходимость во всем стандартном шаблоне сбора параметров HTTP-запроса, их преобразовании / проверке, обновлении значений модели, выполнении правильного метода Java для работы и генерации шаблонного кода HTML / CSS / JS. С JSF вы в основном получаете страницу XHTML в качестве определения представления и класс Javabean в качестве определения модели. Это значительно ускоряет разработку.

Как и в случае с любой компонентной веб-платформой MVC, в JSF у вас есть менее детальный контроль над визуализированным HTML / CSS / JS. Добавить собственный код JS не так просто, так как вы должны также учитывать состояние представления JSF на стороне сервера (например, включение отключенной кнопки на стороне JS не приведет к включению кнопки на стороне JSF, что, в свою очередь, огромное преимущество в безопасности). Если это, однако, серьезное препятствие, то лучше поищите веб-платформу MVC на основе действий, такую ​​как Spring MVC . Вы только примете во внимание, что вам нужно написать весь этот код HTML / CSS / JS (и предотвратить XSS, CSRF и DOM-манипуляции!) Самостоятельно . Кроме того, если вы вернетесь с Facelets на JSP, вы также упустите расширенные возможности создания шаблонов.

С другой стороны, если у вас большой веб-сайт на основе JSP / Servlet / HTML / CSS / JS / jQuery, и вы хотите реорганизовать повторяющийся шаблонный код JSP / Servlet / HTML / CSS / JS / jQuery в повторно используемые компоненты, тогда одним из решений будет JSF. В этом могут помочь пользовательские шаблоны, файлы тегов и компоненты. С этой точки зрения JSF стоит выше JSP / Servlet / HTML / CSS / JS / jQuery (и именно поэтому очень важно понять эти основы, прежде чем погружаться в JSF).

Вы можете найти настоящий стартовый проект на основе JSF здесь: Java EE Kickoff App . Вы увидите, что он содержит рядом с JSF также хорошие HTML5 , CSS3 и jQuery .

Смотрите также:


15
Делайте больше с меньшим количеством кода? Но с большим количеством xml ... какой компромисс ... кроме того, он лишает вас гибкости
Danubian Sailor

33
В JSF 2.0+ xml не требуется.
Cagatay Civici

5
У нас есть аннотации в JSF 2.0
VdeX

1
Кажется, что нет четкого разграничения между уровнем бизнеса / контроллера и представлением с JSF, поскольку большая часть представления создается на сервере. Я понимаю, что все компилируется на сервере перед отправкой в ​​браузер, но я предпочитаю, чтобы мой объект Java возвращал данные, отображаемые в представлении, а не отправлял логику / данные визуализации.
Рик

1
согласен, JSF - это серверная вещь с мощным контролем над HTML.
Plain_Dude_Sleeping_Alone

28

JSF был создан, чтобы сделать так, чтобы java-магазинам не приходилось изучать такие вещи, как jQuery, и создавать сложные JS, а вместо этого сосредотачиваться на чисто Java-стеке. В мире, где время - деньги, а множество мест уже сосредоточено на разработке Java, на один язык меньше в стеке, что ускоряет обучение и сопровождение, а значит, дешевле.

Я добавлю, что JavaScript легко превратиться в кошмар обслуживания для больших команд, особенно если некоторые из разработчиков проекта не очень разбираются в веб.


Так что, если мне достаточно комфортно с JQuery JS и т. Д., Мне не нужно концентрироваться на JSF?
сушил бхарвани

2
Все зависит от проблемы, которую вы пытаетесь решить, и от того, с какой командой вы ее решаете.
Эндрю Уайт

1
Я согласен с командой, но мне интересно узнать, какие различные проблемы может решить JSF, а js jQuery и т. Д. Не могут. Просто пытаюсь создать мотивацию для изучения JSF.
сушил бхарвани

1
Нет, это просто другой способ решения тех же проблем.
Эндрю Уайт

8
Даже если вам действительно комфортно с JQuery, JSF все равно действительно полезен. Он обеспечивает простой способ подключения кода на стороне сервера к представлениям на стороне клиента. Некоторые «составные компоненты» Facelets представляют собой лишь довольно тонкую оболочку для HTML и JS (включая JQuery). Их несложно создать и, в целом, они просто упрощают соединение на стороне клиента и сервера.
Arjan Tijms,

23

С Javascript и такими фреймворками, как jQuery, вы получаете полную гибкость и полный контроль. С ext и т.д. вы теряете контроль и должны адаптироваться к фреймворку. С JSF вы полностью теряете контроль и должны полностью адаптироваться к структуре. Вы вызываются в жизненных циклах и т. Д., И, наконец, вы не можете контролировать, когда можно сделать вызов на сервер, а где нет. Если вы собираетесь сделать что-то «особенное», вы находитесь в очень тяжелом положении. А в мире JSF даже такие базовые вещи, как сортировка многоколоночной таблицы или поля, в которые можно вводить только ограниченный набор символов (например, числовое поле), считаются «особыми».

Однако чем больше у вас гибкости, тем больше ошибок или неправильных действий вы сможете совершить. Высокая гибкость работает только с очень умными программистами, другие превратят проект в неуправляемый кошмар.

Но с JSF и его ограниченной гибкостью всегда есть только несколько (или даже только один) правильный способ что-то сделать. Вы очень ограничены, вы не можете создавать ярлыки, вы должны писать больше XML и т. Д. - но при адаптации к стандарту появляется лучший контроль над кодом, который будут создавать неопытные или неопытные программисты. В результате крупные корпорации любят JSF, потому что он «безопаснее» для них.

Когда я перешел с GWT на JSF, я был шокирован тем, как много вещей, которые были естественными для меня, считались весьма нетипичными и скольких простых вещей было так сложно достичь. Более того, даже внесение мельчайших изменений, таких как добавление знака ':' после метки, что в приложении на базе GWT / jQuery будет изменять метку, генерирующую одну функцию, потребовало изменения десятков файлов с локализованными свойствами, что даже не было рассмотрено кто-нибудь кроме меня странный ...


7
PrimeFaces основан на jQuery, поэтому у вас есть большая гибкость на стороне клиента, а также компоненты PrimeFaces предоставляют множество хуков на стороне клиента и сервера в качестве обратных вызовов событий, которые вы можете настроить. API-интерфейсы Javascript можно переопределить, а также CSS для индивидуального оформления. : label можно настроить глобально в web.xml для более дружественного к jQuery символа.
Cagatay Civici

1
Согласовано. Общее правило таково: использование фреймворка требует продвинутого программирования на javascript и его будет сложно поддерживать, но оно дает значительно большую мощность и сложность, в то время как использование фреймворков будет легче создавать и поддерживать, но ограничивает потенциальную емкость приложения.
KTys 08

10

Преимущества использования JSF заключаются не только в создании xhtml + css + js. Иногда JSF накладывает ограничение на разметку, которую вы можете создать, как и любой компонентный фреймворк. Но JSF не только для этого, его жизненный цикл очень помогает. После проверки ввода он может без каких-либо усилий обновить модель и синхронизировать компоненты на стороне сервера. вы просто говорите: «что бы ни вводил здесь пользователь, проверьте, является ли это числом, если да, то сохраните его в свойстве YY в объекте XX», и JSF сделает все это.

Так что да, вы все равно можете использовать JQuery, JS и т. Д. Но JSF дает много преимуществ, когда дело доходит до написания кода на стороне сервера, и избавляет вас от большого количества шаблонов.


9

Я категорически не согласен с тем, что jsf что-либо добавляет. Это только добавляет накладные расходы. Создание пользовательского интерфейса на сервере - самая нелепая вещь, которую я когда-либо слышал. И javascript в больших командах отлично работает - это называется повторным использованием кода.

Просто оберните jquery в несколько тегов jsp, это все, что вам нужно, и все готово, и не терпите проблем с масштабируемостью и jsf и richfaces.


14
JSF ориентирован на приложения на основе форм. jQuery - это хорошо (черт возьми, многие популярные библиотеки компонентов JSF, такие как PrimeFaces, RichFaces и IceFaces, даже используют его под обложками), но jQuery никоим образом не упрощает обработку отправки форм на стороне сервера. Использование простого JSP / сервлета приведет только к ужасному шаблонному коду. Опять же, JSF - это не только HTML / CSS / JS, но и JSP / Servlet.
BalusC

2
Я думаю, если вы прочитаете больше о JSF в целом и о жизненном цикле страницы JSF в частности, вы можете передумать. Опять же, вы не можете.
Ахмед Анвар

5

Поработав с JSF, Spring MVC, Struts, Grails, JQuery и ExtJS, я считаю, что Grails + ExtJS - это мощная комбинация.

В любой день я бы предпочел Grails JSF. Мне нравится полнота ExtJS как фреймворка и библиотеки на стороне клиента, но он требует более крутого обучения, чем JQuery.


3

Вот самые большие различия между jQuery и JSF:

  • нет архитектуры MVC
  • нет контроля состояния (сохранить дату в сеансе или разговоре, автоматическая очистка и т. д.)
  • нет (по умолчанию) библиотеки проверки
  • нет библиотеки шаблонов
  • нет расширенной навигации / маршрутизации
  • сторона клиента

jQuery никогда не предназначался для использования в качестве полнофункционального веб-фреймворка. Он был больше предназначен для замены низкоуровневого JS-кода, чтобы писать JS стало проще и эффективнее с меньшим количеством строк кода.

И поэтому его следует в основном использовать для добавления поведения к элементам HTML.


2

Пользуясь фреймворком ExtJS для большого веб-приложения, я знаю, насколько легко им пользоваться. ExtJS (Schena) лучше всего подходит для взаимодействия с базами данных (Oracle 11g) в архитектуре MVC. Представление предназначалось для визуального / пользовательского взаимодействия. Контроллер определил «обработку» и триггеры, которые необходимо было использовать для пакетов PLSQL (API для CRUD, запросы выбора SQL и т. Д.). Файлы модели и хранилища использовались для «сопоставления» элементов данных со средством просмотра / входами.

ExtJS не подходит для веб-интерфейсов, не интенсивно использующих базы данных - где Angular JS может быть лучше.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.