JSF » История » Версия 2
Александр Александров, 23.04.2019 16:27
1 | 1 | Александр Александров | h1. JSF |
---|---|---|---|
2 | |||
3 | h2. Вопросы |
||
4 | |||
5 | # Что такое JSF? |
||
6 | # Что такое Managed Bean? |
||
7 | # Каковы три типа тегов для текстовых полей существуют в JSF? |
||
8 | # Что означает аннотация @ManagedProperty? |
||
9 | # На что указывает аннотация @ApplicationScoped? |
||
10 | # Что такое связывание ресурсов в JSF? |
||
11 | # Объясните разницу между required и requiredMessage атрибутов в теге <h:inputText>. |
||
12 | # Какие различные типы навигации по страницам поддерживаются в JSF? |
||
13 | # Какие фазы жизненного цикла в JSF вы знаете? |
||
14 | # Объясните назначение тега <h:form>. |
||
15 | # Какие теги используются для action и navigation? |
||
16 | # Какие компоненты используются для отображения данных в табличном виде? |
||
17 | # Что такое событие (event)? |
||
18 | # Как мы можем получить generated event? |
||
19 | # Какие различные типы событий существуют в JSF? |
||
20 | # Что такое класс-слушатель? |
||
21 | # Какое назначение тега facelets? |
||
22 | # Назовите несколько facelets тегов. |
||
23 | # Какие различные типы валидации используются в JSF? |
||
24 | # Какие различные типы выражений поддерживаются JSF EL (Expression Language)? |
||
25 | # В чем разница между мгновенными и отложенными выражениями? |
||
26 | # Объясните разницу между value expression и method expression. |
||
27 | # Расскажите о @ViewScoped, @SessionScoped, @CustomScoped и @RequestScoped аннотациях. |
||
28 | # Какие существую способы объявить класс управляемым бином JSF? |
||
29 | # Как используются атрибуты name и eager в Managed Bean? |
||
30 | # Какие теги для валидации существуют в JSF? |
||
31 | # Какие преимущества использования JSF Framework? |
||
32 | # Какие различные теги JSF используются для конвертации? |
||
33 | # Перечислите преимущества использования языка выражений (expression language)? |
||
34 | # Поясните название backing bean. |
||
35 | # Какие стандартные библиотеки тегов JSF вы знаете? |
||
36 | # Какие основные функции выполняет метод в backing bean? |
||
37 | # Каковы различные реализации JSF API вы знаете? |
||
38 | # Объясните архитектуру JSF. |
||
39 | # Как различные компоненты рендерятся на JSF странице? |
||
40 | # Может JSF содержать несколько файлов конфигурации? |
||
41 | # Чем различается понятия backing bean и managed bean? |
||
42 | # Как отобразить сообщения об ошибках в JSF? |
||
43 | # Объясните назначение тега selectOne menu в JSF. |
||
44 | # Объясните в чем разница между атрибутами immediate и rendered? |
||
45 | # Какие два способа связывания поддерживается JSF? |
||
46 | # Какая минимальная конфигурация необходима для JSF приложения? |
||
47 | # Что означает navigation rule в JSF? |
||
48 | # Расскажите о назначение тегов converter в JSF. |
||
49 | # Перечислите преимущества таблицы данных в JSF. |
||
50 | # Как реализовать интернационализацию (локализацию) (i18n) в JSF? |
||
51 | # Какая модель рендеринга применяется в JSF? |
||
52 | # Что такое render kit? |
||
53 | # Что такое view object? |
||
54 | # Что подразумевается под Bean Scope? |
||
55 | # В чем разница между JSF-1 и JSF-2? |
||
56 | # Может ли отсутствовать faces-conÙg.xml у JSF приложения? |
||
57 | # Сравните JSF и Spring Framework. |
||
58 | # Можем ли мы интегрировать JSF с другими популярными фреймворками вроде Spring, Hibernate и т.д.? |
||
59 | |||
60 | h2. Ответы |
||
61 | |||
62 | h3. Что такое JSF? |
||
63 | |||
64 | 2 | Александр Александров | JavaServer Faces (JSF) - это фреймворк для веб-приложений, написанный на Java. Он служит для того, чтобы облегчать разработку пользовательских интерфейсов для Java EE-приложений. В отличие от прочих MVC-фреймворков, которые управляются запросами, подход JSF основывается на использовании компонентов. Состояние компонентов пользовательского интерфейса сохраняется, когда пользователь запрашивает новую страницу и затем восстанавливается, если запрос повторяется. JavaServer Faces включает набор API для представления компонент пользовательского интерфейса (UI) и управления их состоянием, обработкой событий и валидацией вводимой информации, определения навигации, а также поддержку интернационализации (i18n) и доступности (accessibility). В JSF 2.0 в качестве обработчика представления используется технология Facelets которая пришла на замену JSP. |
65 | |||
66 | 1 | Александр Александров | h3. Что такое Managed Bean? |
67 | |||
68 | 2 | Александр Александров | В технологии JSF управляемые бины применяются для сохранения состояния webстраниц. Создание бинов и манипулирование ими осуществляются под управлением |
69 | реализации JSF, которая выполняет следующее: |
||
70 | |||
71 | * Создание и уничтожение бинов по мере необходимости (этим объясняется происхождение термина "управляемые бины"). Для создания можно использовать аннотацию @ManagedBean. |
||
72 | * Считывание свойств бина при отображении web-страницы |
||
73 | * Задание свойств бина при отправке формы |
||
74 | |||
75 | 1 | Александр Александров | h3. Каковы три типа тегов для текстовых полей существуют в JSF? |
76 | |||
77 | 2 | Александр Александров | <h:inputText> - стандартное текстовое поле для ввода данных. |
78 | <h:inputSecret> - вводимые данные скрываются (например точками). |
||
79 | <h:inputTextarea> - используется для возможности ввода больших объемов текстовой информации. |
||
80 | |||
81 | 1 | Александр Александров | h3. Что означает аннотация @ManagedProperty? |
82 | |||
83 | 2 | Александр Александров | Аннотация @ManagedProperty позволяет внедрять один управляемый бин в другой. |
84 | |||
85 | <pre><code class="java"> |
||
86 | @ManagedProperty(value = "{#beanName}") |
||
87 | private BeanName beanName; |
||
88 | </code></pre> |
||
89 | |||
90 | 1 | Александр Александров | h3. На что указывает аннотация @ApplicationScoped? |
91 | |||
92 | 2 | Александр Александров | Аннотация @ApplicationScoped указывает на то, что управляемый бин будет доступен на протяжении времени жизни приложения. |
93 | |||
94 | 1 | Александр Александров | h3. Что такое связывание ресурсов в JSF? |
95 | |||
96 | 2 | Александр Александров | Сохранение UI labels, дат, сообщений и другой текстовой информации графических компонентов в различных properties файлах называется связыванием ресурсов. Типичным примером может служить локализация приложения, когда в нескольких файлах resuorcebundle.properties находятся варианты записи лейблов для нескольких языков. Это позволяет не хардкодить информацию на представлениях, а иметь возможность динамического связывания представления и кода в управляемом бине или файле свойств. |
97 | |||
98 | {{dmsf_image(296)}} |
||
99 | |||
100 | Потом эту информацию можно связать на xhtml странице: |
||
101 | |||
102 | {{dmsf_image(297)}} |
||
103 | |||
104 | Так же можно связывать данные на xhtml страницы с управляемым бином с помощью геттеров и сеттеров. |
||
105 | |||
106 | 1 | Александр Александров | h3. Объясните разницу между required и requiredMessage атрибутов в теге <h:inputText>. |
107 | |||
108 | 2 | Александр Александров | Эти два тега объявляют необходимость обязательного заполнения текстового поля, а так же сообщения, которое будет выполнено при нарушении этого правила. Такой подход используется при валидации компонентов, например для требования заполнить имя пользователя, пароль или email в соответствующих полях. |
109 | |||
110 | 1 | Александр Александров | h3. Какие различные типы навигации по страницам поддерживаются в JSF? |
111 | |||
112 | 2 | Александр Александров | В JSF поддерживаются следующие типы навигации по страницам: |
113 | |||
114 | * Implicit Navigation (неявная навигация), |
||
115 | * Navigation through Managed Bean (навигация с помощью управляемого бина), |
||
116 | * Navigation through faces-conÙg.xml (навигация через настройки faces-conÙg.xml), |
||
117 | * Forward versus Redirect navigation |
||
118 | * Conditional Navigation (условная навигация) |
||
119 | |||
120 | 1 | Александр Александров | h3. Какие фазы жизненного цикла в JSF вы знаете? |
121 | |||
122 | 2 | Александр Александров | {{dmsf_image(298)}} |
123 | |||
124 | Фазы жизненного цикла: |
||
125 | |||
126 | * Восстановление представления - для запрошенной страницы либо извлекается дерево компонентов (если страница уже запрашивалась), либо создается новое дерево компонентов (если страница запрашивается впервые). Для компонентов запрашиваемой страницы восстанавливаются их прошлые состояния (веб-форма заполняет вводимыми значениями). |
||
127 | * Применение значений запроса - всем объектам дерева компонентов присваиваются соответствующие им значения из запроса. Так же, в этой фазе, при необходимости, добавляются события(щелчок по кнопке или ссылке) в очередь событий. |
||
128 | * Обработка проверок - отправленные строковые значения преобразуются в "локальные значения", которые могут представлять собой объекты любого типа. Применяются валидаторы. |
||
129 | * Обновление значений модели - изменяются свойства привязанных к компонентам бинов. |
||
130 | * Вызов приложения - выполняется метод action кнопки или ссылки, щелчок по которой привел к отправке формы. Этот метод может выполнять любую прикладную обработку. Он возвращает строку, которая передается обработчику навигации. |
||
131 | * Визуализация ответа - генерируется html и отправляется клиенту. |
||
132 | |||
133 | 1 | Александр Александров | h3. Объясните назначение тега <h:form>. |
134 | |||
135 | 2 | Александр Александров | Тег <h:form> генерирует элемент формы HTML, который использует "POST" запрос для подтверждения формы и пересылки данных из формы. Поведение при декодировании: получает Map из свойства "requestParameterMap" из ExternalContext. Если map содержит "clientId" этого UIForm компонента, то вызывается setSubmitted(true) на форме, в противном случае вызывается setSubmitted(false) на форме. |
136 | |||
137 | Поведение кодирования: Значение атрибута "метод" должно быть "post". Значение атрибута "action" должно быть результатом передачи идентификатора текущего представления к методу getActionURL() из ViewHandler данного приложения, далее передача String к методу encodeActionURL() из ExternalContext. Необходимо вызвать ViewHandler.writeState() до закрытия элемента "form". Подробнее о деталях поведения формы можно прочитать на сайте Oracle. |
||
138 | |||
139 | 1 | Александр Александров | h3. Какие теги используются для action и navigation? |
140 | |||
141 | 2 | Александр Александров | К тегам для команд action и навигации относятся: |
142 | |||
143 | <h:commandButton> - генерирует HTML button, которая подтверждает форму и таким образом позволяет начать обработку данных, введенных пользователем. |
||
144 | <h:commandLink> - генерирует HTML гиперссылку, эквивалентную тегу анкор в HTML. Может быть связана с управляемым бином или классом Action для обработки событий. |
||
145 | |||
146 | 1 | Александр Александров | h3. Какие компоненты используются для отображения данных в табличном виде? |
147 | |||
148 | 2 | Александр Александров | Основным компонентом для работы с таблицами является <h:dataTable>. Содержит обширные настройки отображения и взаимодействия между представлением и управляемыми бинами. |
149 | |||
150 | 1 | Александр Александров | h3. Что такое событие (event)? |
151 | |||
152 | 2 | Александр Александров | Событие - реакция на действие пользователя, например нажатие кнопки, активация ссылки или изменение компонента. JSF поддерживает listeners (слушатели), которые реагируют на различные возникающие события и позволяют обрабатывать их. |
153 | |||
154 | 1 | Александр Александров | h3. Как мы можем получить generated event? |
155 | |||
156 | 2 | Александр Александров | Чтобы получить сгенерированное событие мы можем воспользоваться следующей записью: |
157 | |||
158 | {{dmsf_image(299)}} |
||
159 | |||
160 | 1 | Александр Александров | h3. Какие различные типы событий существуют в JSF? |
161 | |||
162 | 2 | Александр Александров | В JSF различают три вида событий: |
163 | |||
164 | * Action Events: событие, которое создается ui component, например command button или command hyperlink. Обрабатывается в ManagedBean с помощью метода processAction(ActionEvent ae). |
||
165 | * Value Change Events: событие связанное с изменением значения UI компонента. К компонентам, которые могут генерировать value change events относятся: textÙeld, radio button, list box и т.д.. Этот тип событий создается сразу же после изменения значения в UI компоненте. Обрабатывается в ManagedBean с помощью метода someMethod(ValueChangeEvent vc). |
||
166 | * Phase Events: этот тип событий возникает в одной из шести фаз жизненного цикла JFS и выполняется либо в начале, либо в конце каждой фазы. Обрабатывается в ManagedBean с помощью методов: beforePhase(PhaseEvent pe), afterPhase(PhaseEvent pe), PhaseId getPhaseId(). |
||
167 | |||
168 | 1 | Александр Александров | h3. Что такое класс-слушатель? |
169 | |||
170 | 2 | Александр Александров | Класс, который связан с возникающим событием называется класс слушатель (listener class). Создать такой класс можно реализовав интерфейсы PhaseListener, ActionListener или метод с входным параметром (ValueChangeEvent ev). |
171 | |||
172 | 1 | Александр Александров | h3. Какое назначение тега facelets? |
173 | |||
174 | 2 | Александр Александров | JSF предоставляет специальный набор тегов, которая дает большую гибкость для управления общими тегами / частями в одном месте для нескольких приложений. Эти теги позволяют создать единый шаблон, который может быть использован в различных приложениях. Включить Facelets теги можно следующим образом: |
175 | |||
176 | {{dmsf_image(300)}} |
||
177 | |||
178 | 1 | Александр Александров | h3. Назовите несколько facelets тегов. |
179 | |||
180 | 2 | Александр Александров | Наиболее распространенные facelets теги: <ui:component>, <ui:composition>, <ui:decorate>, <ui:deÙne>, <ui:fragment>, <ui:include>, <ui:insert>, <ui:param>, <ui:remove>, <ui:repeat>. |
181 | |||
182 | 1 | Александр Александров | h3. Какие различные типы валидации используются в JSF? |
183 | |||
184 | 2 | Александр Александров | В JSF есть два типа валидации: |
185 | |||
186 | * Declarative Validations - валидация, которая срабатывает при помощи стандартных валидаторов JSF или Bean валидаторов. |
||
187 | * Imperative validation - стандартных сообщений о проверке обычно не достаточно и валидация, которая переопределяет стандартную относится к императивному типу проверок. |
||
188 | |||
189 | {{dmsf_image(301)}} |
||
190 | |||
191 | Так же есть возможность создать свой собственный класс валидатор с помощью реализации интерфейса Validator и переопределение необходимого метода. |
||
192 | |||
193 | 1 | Александр Александров | h3. Какие различные типы выражений поддерживаются JSF EL (Expression Language)? |
194 | |||
195 | 2 | Александр Александров | Различают три типа выражений в JSF Expression Language: |
196 | |||
197 | * Immediate value expressions - выполняются сразу при отображении страницы. Записываются как ${}. |
||
198 | * Deferred value expressions - выполняются тогда, когда это необходимо (когда к ним обращаются). Синтаксис: #{expression}. Подразделяются на value expression и method expression. |
||
199 | * Value expression and method expression. Выражения значения подразделяются на read only и rear-write. Записываются как #{beanName.propertyName}. Method expression позволяют вызывать метод из представления. Синтаксис #{beanName.methodName()}. |
||
200 | |||
201 | 1 | Александр Александров | h3. В чем разница между мгновенными и отложенными выражениями? |
202 | |||
203 | 2 | Александр Александров | Мгновенные выражения выполняются и вычисляются на этапе рендера отображения. Отложенные выражения выполняются при непосредственном вызове. Например выполнение метода при нажатии на кнопку или получения значения свойства при построении фрагмента отображения (например при построении таблицы необходимо получить значения данных). |
204 | |||
205 | 1 | Александр Александров | h3. Объясните разницу между value expression и method expression. |
206 | |||
207 | 2 | Александр Александров | Value expression используются для работы со свойствами в управляемом бине. В случае, если для свойства есть только геттер такое выражение относят к read only.\ Если для свойства есть и геттер и сеттер, то свойство доступно для чтения и записи. Method expression используется для вызова метода в управляемом бине и получения (если необходимо) его результата для последующей обработки в представлении или другом коде. |
208 | |||
209 | 1 | Александр Александров | h3. Расскажите о @ViewScoped, @SessionScoped, @CustomScoped и @RequestScoped аннотациях. |
210 | |||
211 | 2 | Александр Александров | @ViewScoped: означает, что управляемый бин существует на протяжении временижизни представления JSF (пока страница показывается). |
212 | @SessionScoped: бин будет доступен на протяжении всей HTTP сессии. |
||
213 | @CustomScoped: бин будет жить столько, сколько он будет находится в Map, котораясоздается для контроля времени жизни бинов. |
||
214 | @RequestScoped: бин существует на время жизни запроса-ответа (HTTP requestresponse). |
||
215 | |||
216 | 1 | Александр Александров | h3. Какие существую способы объявить класс управляемым бином JSF? |
217 | |||
218 | 2 | Александр Александров | Для объявлении класса управляемым бином используется аннотация |
219 | |||
220 | <pre> |
||
221 | @ManagedBean(name ="beanName", eager = "true\false") |
||
222 | </pre> |
||
223 | |||
224 | Другим способом объявить управляемый бин - это указать его в faces-config.xml: |
||
225 | |||
226 | {{dmsf_image(302)}} |
||
227 | |||
228 | 1 | Александр Александров | h3. Как используются атрибуты name и eager в Managed Bean? |
229 | |||
230 | 2 | Александр Александров | name: указывает уникальное имя класса (бина) в JSF. Если имя не указано, то имя совпадает с именем класса где первая буква в нижнем регистре. |
231 | eager: указывает на время создания бина. Если стоит true, то бин будет создан на старте приложения, если false, то бин будет создан при первом запросе к нему. |
||
232 | |||
233 | 1 | Александр Александров | h3. Какие теги для валидации существуют в JSF? |
234 | 2 | Александр Александров | |
235 | f:validateLength: проверяет длину строки, |
||
236 | f:validateLongRange: проверка числового диапазона, |
||
237 | f:validateDoubleRange: проверка диапазона для типов float, double, |
||
238 | f:validateRegex: проверка значения согласно регулярному выражению. |
||
239 | 1 | Александр Александров | |
240 | h3. Какие преимущества использования JSF Framework? |
||
241 | |||
242 | h3. Какие различные теги JSF используются для конвертации? |
||
243 | |||
244 | h3. Перечислите преимущества использования языка выражений (expression language)? |
||
245 | |||
246 | h3. Поясните название backing bean. |
||
247 | |||
248 | h3. Какие стандартные библиотеки тегов JSF вы знаете? |
||
249 | |||
250 | h3. Какие основные функции выполняет метод в backing bean? |
||
251 | |||
252 | h3. Каковы различные реализации JSF API вы знаете? |
||
253 | |||
254 | h3. Объясните архитектуру JSF. |
||
255 | |||
256 | h3. Как различные компоненты рендерятся на JSF странице? |
||
257 | |||
258 | h3. Может JSF содержать несколько файлов конфигурации? |
||
259 | |||
260 | h3. Чем различается понятия backing bean и managed bean? |
||
261 | |||
262 | h3. Как отобразить сообщения об ошибках в JSF? |
||
263 | |||
264 | h3. Объясните назначение тега selectOne menu в JSF. |
||
265 | |||
266 | h3. Объясните в чем разница между атрибутами immediate и rendered? |
||
267 | |||
268 | h3. Какие два способа связывания поддерживается JSF? |
||
269 | |||
270 | h3. Какая минимальная конфигурация необходима для JSF приложения? |
||
271 | |||
272 | h3. Что означает navigation rule в JSF? |
||
273 | |||
274 | h3. Расскажите о назначение тегов converter в JSF. |
||
275 | |||
276 | h3. Перечислите преимущества таблицы данных в JSF. |
||
277 | |||
278 | h3. Как реализовать интернационализацию (локализацию) (i18n) в JSF? |
||
279 | |||
280 | h3. Какая модель рендеринга применяется в JSF? |
||
281 | |||
282 | h3. Что такое render kit? |
||
283 | |||
284 | h3. Что такое view object? |
||
285 | |||
286 | h3. Что подразумевается под Bean Scope? |
||
287 | |||
288 | h3. В чем разница между JSF-1 и JSF-2? |
||
289 | |||
290 | h3. Может ли отсутствовать faces-conÙg.xml у JSF приложения? |
||
291 | |||
292 | h3. Сравните JSF и Spring Framework. |
||
293 | |||
294 | h3. Можем ли мы интегрировать JSF с другими популярными фреймворками вроде Spring, Hibernate и т.д.? |