Ответы на вопросы на собеседование Java Server Faces (JSF) (часть 2).

  • Какие преимущества использования JSF Framework?

Отделение бизнес логики от представления.
Управление состоянием пользовательского интерфейса UI с помощью нескольких запросов к серверу.
Поддерживается реализация собственных компонентов.
Легкая передача данных между различными компонентами.
JSF является стандартом JEE, что дает уверенность в работе заявленных функций. Существует множество сторонних библиотек для JSF, например библиотека компонентов PrimeFaces.


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

f:convertNumber: используется для преобразования строки в число.
f:convertDateTime: используется для преобразования строки в формат даты.
CustomConverter: созданный пользователем конвертер JSF.


  • Перечислите преимущества использования языка выражений (expression language)?

Арифметические, логические, реляционные операции могут быть использованы в языке выражений.
Автоматическое преобразование типов.
Показывает пустые или пропущенные значения как пустые строки вместо NullPointerException.
Обеспечивает легкий доступ к предопределенным объектам, таким как запрос (request).

  • Поясните название backing bean.

Backing Bean - специальный JavaBean (java класс), который собирает значения из компонентов, реагирует на события, взаимодействует с бизнес-логикой. Связан с каждым компонентом. Их может быть несколько и бин не является необязательным для UI компонента, а просто использует его. Backing bean содержит поля, которые будут заполняться из компонента (занесет значения введенные пользователем). JSF компонент не будет работать с Java классами и с чем-то другим, кроме Backing bean.

  • Какие стандартные библиотеки тегов JSF вы знаете?

JSF Core Tags library и JSF HTML tags library. Задать пространство имен в xhtml странице можно следующим образом:
Затем с помощью указанных префиксов можно задавать какие-либо компоненты, например <h:form>, <c:validator> и т.д..

  • Какие основные функции выполняет метод в backing bean?

Проверяет данные компонента
Обрабатывает события компонента
Выполняет обработку запроса для определения к какой следующей странице необходимо навигироваться.

  • Каковы различные реализации JSF API?

ADF Faces: реализация JSF стандарта компанией Oracle.
Reference Implementation (RI): от Sun Microsystems.
Apache MyFaces: open source реализация JavaServer Faces (JSF).
Primefaces: мощная библиотека компонентов JSF с поддержкой Ajax и JavaScript.

  • Объясните архитектуру JSF.

JSF основывается на шаблоне проектирования MVC, что означает отделение бизнес логики от представлений. Приложение JSF содержит:
  • UI компоненты, которые представляют состояния объектов на сервере.
  • Классы-помощники на стороне сервера.
  • Validators, event handlers  и navigation handlers.
  • Конфигурацию приложения и используемых ресурсов.
  • Компоненты JavaBeans, которые используются как модель с необходимой функциональностью и информацией.
  • Собственные библиотеки тегов для работы с event handlers и validators.
  • Собственные библиотеки тегов для работы с графическими компонентами.
Ниже представлена схема JSF архитектуры:

  • Как различные компоненты рендерятся на JSF странице?

Компоненты JSF отображаются на xhtml странице, включающую библиотеки тегов вроде jsf core, html, facelets tags.

  • Может JSF содержать несколько файлов конфигурации?

Да, может. Их необходимо указать в web.xml.

  • Чем различается понятия backing bean и managed bean?

Вообще на данный момент существует мнение, что эти понятия не следует различать (например так делает spring). Но если нужно как-то ответить по другому, то:
  • backing bean должны определяться в request scoped. Backing bean связан с формой.
  • Managed bean может определяться в request, session, application scopes. Этот тип бинов регистрируется в контексте приложения JSF и может быть вызван или создан в любое время и месте. Управляемые бины работают с графическими компонентами JSF.

  • Как отобразить сообщения об ошибках в JSF?

Отображать какие либо системные ошибки можно с помощью тега <h:messages>, который может ссылаться на какой-либо графический компонент с помощью атрибута for.


  • Объясните назначение тега selectOne menu в JSF.

Компонент selectOneMenu позволяет выбрать одно из списка значений. Компонент может выглядеть как list box, radio buttons или как меню.

  • Объясните в чем разница между атрибутами immediate и rendered?

Атрибут immediate при значении true позволяет пропускать некоторые фазы жизненного цикла JSF. Например при нажатии на кнопку submit и необходимости подтверждения формы будет пропущена валидация и преобразования. Данные, например, компонента inputTextField не будут отправлены в модель. В общем представление не достучится до своей модели и будет выполнены команды на кнопке с атрибутом immediate=’true’.
Атрибут rendered указывает на необходимость создания (отрисовки) компонента на представлении. Этот атрибут может быть задан с помощью логического выражения.

  • Какие два способа связывания поддерживается JSF?

Связывание значения компонента с свойством в бине или внешним ресурсом.
Связывание экземпляра компонента с свойством в бине.

  • Какая минимальная конфигурация необходима для JSF приложения?

Необходимо настроить как минимум два файла конфигурации:
  • web.xml - основной файл конфигурации веб приложения. Содержит детали развертывания, конфигурации приложения и обработчиков JSF.
  • faces-config.xml - предоставляет настройки приложения, управляемых бинов, навигации, конвертеров, валидаторов.


  • Что означает navigation rule в JSF?

Navigation rule описывает правила навигации в приложении.

  • Расскажите о назначение тегов converter в JSF.

Использование тега конвертера в компоненте позволяет преобразовать данные в необходимый вид. Например, в теге <h:outpuText> можно задать конвертер, который будет обрезать слишком длинную строку:

  • Перечислите преимущества таблицы данных в JSF.

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

  • Как реализовать интернационализацию (локализацию) (i18n) в JSF?

Существуют различные способы реализации локализации в JSF, как стандартными методами, так и с помощью других фреймворков (например Spring). Главное значение локализации в JSF - отсутствие захардкоренных значений компонентов, текстовых данных и др. в коде. Необходимо задать свойство и связать его с помощью resource bundle файлом, в котором будет храниться набор значений для каждого языка (локали).

  • Какая модель рендеринга применяется в JSF?

Архитектура рендеринга JavaServer Faces основана на компонентах. Состояние компонентов пользовательского интерфейса сохраняется, когда пользователь запрашивает новую страницу и затем восстанавливается, если запрос повторяется.

  • Что такое render kit?

Render kit определяет набор компонентов и классов, которые подходят для отображения конкретному пользователю. Например <f:view renderKitId="PRIMEFACES_MOBILE"/> означает использование мобильного набора компонентов библиотеки Primefaces.

  • Что такое view object?

View object используется специально для представления, но определяется за ее пределами. Он содержит информацию, которую необходимо отобразить в представлении, а так же логику валидации, обработчики событий и определяет взаимодействие с кодом бизнес логики.

  • Что подразумевается под Bean Scope?

Bean scope - механизм связывания бинов и других объектов для возможности доступа к ним из различных компонентов веб приложения.

  • В чем разница между JSF-1 и JSF-2?

JSF 1 не поддерживает Ajax, аннотации, применения шаблонов и вообще достаточно кривой в плане стабильности.

  • Может ли отсутствовать faces-config.xml у JSF приложения?

Можно отказаться от xml файла при использовании аннотаций в коде.

  • Сравните JSF и Spring Framework.

Spring использует Inversion of Control (IoC) и Dependency Injection (DI), а JSF нет.
Spring состоит из множества различных модулей, таких как Spring Data, Security, MVC и много других отлично взаимодействующих частей. Это помогает создавать большие приложения с меньшими затратами, в то время как JSF, скорее всего, потребует больше кодирования для многих необходимых функций.
Использование DI в спринг позволяет внедрять POJO классы, в то время как JSF может работать только с JEE архитектурой.

  • Можем ли мы интегрировать JSF с другими популярными фреймворками вроде Spring, Hibernate и т.д.?

Да, это возможно со всеми популярными фреймворками. Обычно конфигурация приложения для совместной работы JSF, Spring, Hibernate и т.д. не сложная, но из-за объема необходимого кода здесь они приводится не будут. Смотрите документацию для необходимого фреймворка.

Рассказать друзьям:

0 коментарі :

Отправить комментарий