Собеседование по Java EE — Java Server Faces (JSF) (вопросы и ответы). Часть 2

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

к списку вопросов раздела JEE

Собеседование по Java EE — Java Server Faces (JSF) (вопросы и ответы). Часть 1.

Вопросы

31. Какие стандартные библиотеки тегов JSF вы знаете?
32. Какие основные функции выполняет метод в backing bean?
33. Каковы различные реализации JSF API вы знаете?
34. Объясните архитектуру JSF.
35. Как различные компоненты рендерятся на JSF странице?
36. Может JSF содержать несколько файлов конфигурации?
37. Чем различаются понятия backing bean и managed bean?
38. Как отобразить сообщения об ошибках в JSF?
39. Объясните назначение тега selectOne menu в JSF.
40. Объясните в чем разница между атрибутами immediate и rendered?
41. Какие два способа связывания поддерживается JSF?
42. Какая минимальная конфигурация необходима для JSF приложения?
43. Что означает navigation rule в JSF?
44. Расскажите о назначение тегов converter в JSF.
45. Перечислите преимущества таблицы данных в JSF.
46. Как реализовать интернационализацию (локализацию) (i18n) в JSF?
47. Какая модель рендеринга применяется в JSF?
48. Что такое render kit?
49. Что такое view object?
50. Что подразумевается под Bean Scope?
51. В чем разница между JSF-1 и JSF-2?
52. Может ли отсутствовать faces-config.xml у JSF приложения?
53. Сравните JSF и Spring Framework.
54. Почему JSF не так популярна как, например, MVC фреймворки вроде Spring MVC, хотя JSF старше и входит в JEE?
55. Можем ли мы интегрировать JSF с другими популярными фреймворками вроде Spring, Hibernate и т.д.?
56. JSF Best Practices.

Ответы

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

JSF Core Tags library и JSF HTML tags library. Задать пространство имен в xhtml странице можно следующим образом:

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

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

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

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

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

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

JSF основывается на шаблоне проектирования MVC, что означает отделение бизнес логики от представлений. Приложение JSF содержит:

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

Ниже представлена схема JSF архитектуры:

JSF-Architecture-Diagram

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

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

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

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

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

Вообще на данный момент существует мнение, что эти понятия не следует различать (например так делает spring). Но если нужно как-то ответить по другому, то:

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

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

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

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

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

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

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

Атрибут rendered указывает на необходимость создания (отрисовки) компонента на представлении. Этот атрибут может быть задан с помощью логического выражения.

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

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

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

Необходимо настроить как минимум два файла конфигурации:

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

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

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

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

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

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

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

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

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

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

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

48. Что такое render kit?

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

49. Что такое view object?

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

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

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

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

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

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

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

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

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

54. Почему JSF не так популярна как, например, MVC фреймворки вроде Spring MVC, хотя JSF старше и входит в JEE?

Достаточно спорный вопрос, но можно перечислить возможные преимущества Spring.

  • Множество реализаций JSF (Mojarra, Primefaces, Richfaces и др) затрудняют выбор, обучение поддержку приложения для разработчиков, в то время как Spring MVC имеет одну и достаточно качественную реализацию.
  • Spring предоставляет множество своих разработок для разносторонних задач, которые сильно облегчают многие инженерные и управленческие задачи проектирования софта.
  • Паттерны DI и IoC позволяют масштабировать и использовать существующий код в различных приложениях.
  • JSF основывается на компонентной архитектуре, в то время как Spring на request-response. Второй подход многими воспринимается легче, используется в многих фрейморках вроде MVC, Struts2 и других.

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

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

56. JSF Best Practices.

  • Избегать использования JSF компонентов с статичными свойствами.
  • Использовать короткие id компонентов.
  • Избегать связывания компонентов.
  • Использовать facelets для динамического вложения.
к списку вопросов раздела JEE

Собеседование по Java EE — Java Server Faces (JSF) (вопросы и ответы). Часть 1.

Share Button
6
2451 Total Views 2 Views Today

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*