Jakarta Faces , ранее Jakarta Server Faces и JavaServer Faces ( JSF ) — это спецификация Java для создания пользовательских интерфейсов на основе компонентов для веб-приложений . [2] Она была формализована как стандарт через Java Community Process как часть Java Platform, Enterprise Edition . Это веб-фреймворк MVC , который упрощает создание пользовательских интерфейсов (UI) для серверных приложений с помощью повторно используемых компонентов UI на странице. [3]
JSF 2.x использует Facelets в качестве своей системы шаблонов по умолчанию. Пользователи программного обеспечения также могут использовать XUL или Java . [4] JSF 1.x использует JavaServer Pages (JSP) в качестве своей системы шаблонов по умолчанию.
В 2001 году в первоначальном запросе спецификации Java (JSR) для технологии, которая в конечном итоге стала JavaServer Faces, предлагалось разработать пакет с названием javax.servlet.ui
[5]
В июне 2001 года JavaWorld сообщил о разработке командой Эми Фаулер «JavaServer Faces API» (также известного как «Moonwalk») как «прикладной среды для создания пользовательских веб-интерфейсов». [6]
Facelets (разработанный специально для Java Server Faces) был принят в качестве официальной технологии представления для JSF 2.0. Это устраняет конфликты жизненного цикла, которые существовали с JSP, вынуждая разработчиков Java искать обходные пути. [7]
Новые разработки JSF также обеспечивают широкий доступ к аннотациям Java , таким как @ManagedBean
, @ManagedProperty
и @FacesComponent
это устраняет необходимость faces-config.xml,
во всех случаях, кроме расширения фреймворка. Навигация также упрощается, устраняя необходимость в faces-config.xml
случаях навигации. Переходы между страницами можно вызывать, просто передавая имя нужного View или Facelet.
Добавление частичного сохранения состояния и обновлений объектной модели документа (DOM) являются частью встроенной стандартизированной поддержки AJAX .
Последняя версия JSF имеет встроенную поддержку обработки ресурсов, таких как изображения, CSS и Javascript, что позволяет включать артефакты в библиотеки компонентов, разделять их на файлы JAR или просто размещать в согласованном месте в веб-приложении. Это включает логическое именование и управление версиями ресурсов.
JSF 2.0 также включает ряд других изменений, таких как добавление поддержки событий, отдельных режимов разработки, подготовки и производства, аналогичных RAILS_ENV
Ruby on Rails , а также значительное расширение стандартного набора компонентов.
На основе компонентно-управляемой модели проектирования пользовательского интерфейса JavaServer Faces использует XML-файлы, называемые шаблонами представлений или представлениями FaceletsFacesServlet
. Обрабатывает запросы, загружает соответствующий шаблон представления, строит дерево компонентов, обрабатывает события и отображает ответ (обычно на языке HTML) клиенту. Состояние компонентов пользовательского интерфейса и других объектов, представляющих интерес для области действия, сохраняется в конце каждого запроса в процессе, называемом stateSaving (примечание: transient true ), и восстанавливается при следующем создании этого представления. Сохранять объекты и состояния может как клиентская, так и серверная сторона.
JSF часто используется вместе с AJAX , техникой разработки приложений Rich Internet . AJAX — это комбинация техник и технологий веб-разработки, позволяющая создавать насыщенные пользовательские интерфейсы. Компоненты пользовательского интерфейса в Mojarra ( эталонная реализация JSF [12] ) и Apache MyFaces изначально были разработаны только для HTML, а AJAX приходилось добавлять через JavaScript. Однако это изменилось:
Поскольку JSF поддерживает несколько форматов вывода, компоненты с поддержкой AJAX можно легко добавлять для улучшения пользовательских интерфейсов, созданных с помощью JSF. Спецификация JSF 2.0 обеспечивает встроенную поддержку AJAX путем стандартизации жизненного цикла запроса AJAX и предоставления простых интерфейсов разработки для событий AJAX. Спецификация позволяет событию, вызванному клиентом, проходить проверку, преобразование и вызов метода, прежде чем возвращать результат браузеру через обновление XML DOM.
JSF 2 включает поддержку постепенной деградации при отключении JavaScript в браузере.
Следующие компании и проекты предлагают фреймворки JSF или библиотеки компонентов на основе AJAX:
В своей публикации Technology Radar за январь 2014 года ThoughtWorks написала: [13]
Мы продолжаем видеть, как команды сталкиваются с проблемами при использовании JSF – JavaServer Faces – и рекомендуем вам избегать этой технологии. Команды, похоже, выбирают JSF, потому что это стандарт JEE, не оценивая по-настоящему, подходит ли им модель программирования. Мы считаем, что JSF имеет недостатки, поскольку он пытается абстрагироваться от HTML , CSS и HTTP , что является полной противоположностью тому, что делают современные веб-фреймворки . JSF, как и веб-формы ASP.NET, пытается создать состояние поверх протокола HTTP без сохранения состояния и в итоге вызывает целый ряд проблем, связанных с общим состоянием на стороне сервера. Мы знаем об улучшениях в JSF 2.0, но считаем, что эта модель в корне неверна. Мы рекомендуем командам использовать простые фреймворки и принимать и понимать веб-технологии, включая HTTP, HTML и CSS.
В феврале 2014 года Чагатай Чивичи (руководитель PrimeFaces) ответил на критику ThoughtWorks в посте под названием JSF is not what you've been saying longer . Чивичи утверждает, что улучшения в JSF за эти годы предлагают много функций, которые охватывают современную веб-разработку, предоставляя возможность писать собственный JavaScript, HTML и CSS. Также относительно состояния Чивичи написал: [14]
JSF по своей природе является структурой с сохранением состояния, а состояние упрощает разработку веб-приложений. Благодаря улучшенным методам управления состоянием, представленным в JSF 2.0+ (например, режим без сохранения состояния, частичное сохранение состояния), JSF также может масштабироваться.
В статье, опубликованной в ноябре 2014 года на сайте DZone под названием «Почему следует избегать JSF», Йенс Шаудер написал: [15]
Facelets, предпочтительная технология представления JSF, на первый взгляд выглядит как обычная технология шаблонов, вроде старых добрых JSP или Thymeleaf. Но если присмотреться, ужас становится очевидным. В том же месте, где вы структурируете свой HTML, вы также размещаете логику того, какие части пользовательского интерфейса должны обновляться при действии. Явное нарушение принципа разделения интересов в моей книге. Еще лучше — немедленный атрибут, который изменяет жизненный цикл на стороне сервера! И если этого недостаточно, он делает это по-разному в зависимости от того, в каком теге вы его используете. Вы не можете придумать что-то подобное.
В феврале 2016 года сайт сообщества Enterprise Java TheServerSide опубликовал статью, в которой рекомендовалось не использовать JSF, поскольку это может поставить под угрозу качество конечного продукта. В статье подробно излагались пять причин: [16]
JavaServer Faces (JSF) 2.0 — это веб-фреймворк MVC, который фокусируется на упрощении создания пользовательских интерфейсов (поставляется с более чем 100 готовыми тегами пользовательского интерфейса) для веб-приложений Java и упрощает реализацию повторно используемых компонентов пользовательского интерфейса.
2.6 Существует ли предлагаемое имя пакета для спецификации API? (т. е. javapi.something, org.something и т. д.) [:] javax.servlet.ui
API JavaServer Faces (он же Moonwalk) обещает предоставить элегантное решение для реализации интерактивной функциональности в несовместимых браузерах. [...] Разработанный командой под руководством Эми Фаулер, архитектора AWT и Swing компании Sun, API JavaServer Faces предоставит набор инструментов GUI, которые будут работать в распространенных браузерах с использованием стандартного HTML.