JavaServer Faces (JSF) - это среда представления модели-представления, обычно используемая для создания веб-приложений на основе форм HTML. Используя стандартные компоненты и набор визуализации, HTML-представления с сохранением состояния могут быть определены с помощью Facelets или JSP-тегов и могут быть привязаны к модели данных и логики приложения с помощью компонентов поддержки.

Информация, предоставляемая при задании вопросов JSF

Если вы хотите получить хорошие ответы на свои вопросы JSF, вы получите его быстрее, если сразу включите в вопрос следующую информацию.

  • Какую реализацию и версию JSF вы используете?

    Мохарраили MyFaces? 1.0.x, 1.1.x, 1.2.x, 2.0.x, 2.1.x, 2.2.x или 2.3.x? Как правило, точное имя и версию реализации можно найти в журнале запуска веб-приложения или, по крайней мере, в имени файла JAR и / или в файле MANIFEST.MF. Также укажите точную версию любой библиотеки компонентов / утилит JSF, связанной с проблемой. Если вы ничего не упомянули, мы примем последнюю версию, доступную на сегодняшний день.

    Разница между JSF 1.x и JSF 2.x слишком велика, чтобы можно было дать надежный ответ, который может охватывать обе версии. Кроме того, каждая из реализаций / библиотек JSF может иметь свой собственный набор ошибок / изюминок, зависящих от версии, чтобы отвечающий при необходимости мог принять это во внимание. Если доступна более новая версия, попробуйте обновить ее, а затем повторно протестируйте проблему.

  • Есть ли какие-либо предупреждения / ошибки / исключения в сообщениях лиц, консоли браузера или журналах сервера?

    Если приложение не работает автоматически, убедитесь, что вы добавили тег <h:messages> на свою страницу JSF, чтобы не пропустить сообщения о лицах. Также убедитесь, что вы установили javax.faces.PROJECT_STAGE в Development в web.xml, чтобы не пропустить ни одного предупреждения / подсказки по разработке. Также убедитесь, что вы прочитали консоль браузера (нажмите F12 в Chrome / Firefox23 + / IE9 +) и журналы сервера сверху вниз. Исследуйте любую строку, которая представляет предупреждение или ошибку или выглядит ненормальной.

    Когда вы получаете исключение, всегда включайте самую нижнюю основную причину трассировки стека вместе со всеми строками «at» (все остальные причины, приведенные выше, являются просто следствиями). Исключением являются, как правило, отличные ключевые слова для поиска. Вы можете просто выполнить поиск по типу исключения + сообщение и, необязательно, 1-й строке "at" в трассировке без скобок + белья, чтобы узнать, не было ли оно уже задано и получено ранее. Пример 1, пример 2, пример 3.

  • Предоставьте минимальный воспроизводимый пример!

    Постарайтесь максимально изолировать проблему в наименьшем возможном, но полном экземпляре copy'n'paste'n'runnable. Что касается кода Java (backing bean), вам не нужно включать импорт и методы получения / установки. Вам также не нужно включать какие-либо поля и методы, которые не вносят вклад в реальную проблему. Что касается кода XHTML (представление), вам не нужно включать какие-либо теги и атрибуты, которые не способствуют реальной проблеме. Вам также не нужно включать весь уровень бизнес-сервисов (EJB / JPA / Spring / DAO / JDBC / etc), достаточно жестко закодированной модели (в противном случае это не обязательно проблема, связанная с JSF).

    Следует предположить, что потенциальный ответчик скопирует предоставленный Java-код в пустой тестовый класс, автоматически организует импорт и автоматически сгенерирует получатели / установщики, если необходимо, и скопирует предоставленный XHTML-код в <h:body> шаблона без шаблона. (!) тестовый файл в пустом проекте со всем установленным по умолчанию (то есть, без или пустыми файлами конфигурации XML!) и использующими в настоящее время последние версии библиотек / серверов, если иное не указано явно в самом вопросе (и вы также должны проверить это сами так заранее!).

Без вышеупомянутой информации и / или надлежащего MCVE получение ответов будет зависеть больше от удачи (в вопросе о возможных причинах нет двусмысленности и шума) и образованных догадок потенциальных ответчиков (зная наиболее распространенные ошибки стартера). В противном случае вы рискуете закрыть вопрос как «не по теме, потому что нет MCVE или есть только полный дамп кода», или «слишком широкий, потому что в основном он просит нас писать код, а не объяснять и решать проблему».


Минимальные требования

  • JSF 2.4 на самом деле не существует, хотя он случайно присутствует в Maven! См. Также Обновление до JSF 2.4и Не используйте org.glassfish Mojarra 2.4.0!Вам необходимо выбрать самую последнюю версию 2.3.x или будущий JSF 3.x (еще не доступен на момент написания).
  • JSF 2.3 требует минимум Java 1.8, Servlet 3.0, EL 3.0 и CDI 1.2. Сервлет 4.0 является необязательным и позволяет JSF 2.3 обслуживать ресурсы через HTTP / 2 push. Когда используется <f:websocket>, JSONP 1.1 также требуется. CDI 1.2 явно требуется из-за того, что @ManagedBean устарел.
  • JSF 2.2 требует минимум Java 1.6, Servlet 3.0 и EL 2.2. Servlet 3.0 явно требуется из-за нового компонента загрузки файлов, который использует стандартный API Servlet 3.0 для внутреннего использования без необходимости использования сторонних библиотек.
  • JSF 2.1 требует минимум Java 1.5, Servlet 2.5 и EL 2.1. Сервлет 3.0 является необязательным и позволяет JSF 2.1 автоматически запускаться на *.jsf без какой-либо необходимой web.xml конфигурации, пока существует faces-config.xml.
  • JSF 2.0 требует минимум Java 1.5, Servlet 2.5 и EL 2.1. Вы можете использовать Servlet 2.4, если предоставили свой собственный API EL 2.1 / impl.
  • JSF 1.2 требует минимум Java 1.5, Servlet 2.5, JSP 2.1 и EL 2.1. Если вы замените JSP 2.1 на Facelets 1.x в качестве технологии просмотра по умолчанию, то вы можете использовать JSF 1.2 в Servlet 2.4.
  • JSF 1.0 и 1.1 требует минимум Java 1.4, Servlet 2.4 и JSP 2.0.

Примеры контейнеров Java EE и Servlet

  • Сервлет 4.0: Tomcat 9.x, GlassFish / Payara 5.x
  • Сервлет 3.1: Tomcat 8.x, WildFly 8/9/10 / 11.x, GlassFish / Payara 4.x, TomEE 7.x, WebSphere 9.x
  • Сервлет 3.0: Tomcat 7.x, JBoss AS 6 / 7.x, GlassFish 3.x, TomEE 1.x, WebSphere 8.x
  • Сервлет 2.5: Tomcat 6.x, JBoss AS 5.x, GlassFish 2.x, WebSphere 7.x
  • Сервлет 2.4: Tomcat 5.5.x, JBoss AS 4.x, сервер приложений Sun Java, WebSphere 5 / 6.x

Установка JSF

В зависимости от используемого сервера JSF может быть уже встроенным (полноценные контейнеры Java EE, такие как WildFly, JBoss EAP, TomEE, Payara, GlassFish, WebSphereи т. д.) или нет (контейнеры barebones JSP / Servlet, такие как Tomcat, Jettyи т. Д.). Если сервер не поставляется со встроенным JSF, вам нужно вручную установить реализацию JSF по вашему выбору (Мохарра или MyFaces). Не забывайте, jstl, эти базовые контейнеры JSP / Servlet обычно даже не поставляются с JSTL.


Ресурсы

Интернет-уроки

Оффлайн учебники ("книги")

Реализации JSF

  • Mojarra- эталонная реализация Oracle (RI), стандартная часть, например, MyFaces- альтернатива Apache, стандартная часть, например, TomEE

Библиотеки компонентов / утилит JSF

  • PrimeFaces(showcase) - компонент библиотека, основанная на jQuery + jQuery UI
  • OmniFaces(showcase) - служебная библиотека, совместимая с любым JSF библиотека компонентов
  • RichFaces(showcase) - библиотека компонентов, на основе на jQuery + пользовательский интерфейс. (Достигнут конец июня 2016 года)
  • IceFaces(витрина ) - библиотека компонентов, клон PrimeFaces 2.x + некоторые улучшенные компоненты
  • Томагавк - библиотека компонентов, базовые расширения для стандартного JSF, например, переключатели без таблиц
  • Тринидад- библиотека компонентов, расширенные расширения для стандартного JSF + пользовательский JS / ajax
  • OpenFaces(showcase) - компонент библиотека, основанная на пользовательском интерфейсе JS / ajax +
  • BootsFaces(showcase) - библиотека компонентов, на основе Bootstrap
  • ButterFaces- библиотека компонентов, основанная на Bootstrap
  • AngularFaces- библиотека компонентов, устраняющая разрыв между JSF и Angular
  • TornadoFaces- библиотека компонентов с элегантным Widget API, поддерживающим стили SASS

Часто задаваемые вопросы

Больше ссылок:

Связанные теги