# JavaServer Faces

### от Уикипедия, свободната енциклопедия

JavaServer Faces (JSF) е Java технология за създаване на уеб-базирани приложения на основата на Java Servlet API и JSP. JSF е стандартизирана технология и е включена официално в Java Enterprise Edition 5. JSF включва:

- Компоненти - JSF е компонентно базирана технология. Компонентите служат за визуализиране на потребителския интерфейс. Всяка компонента запазва собственото си състояние, като състоянието може да се пази на сървъра или при клиента (клиентски браузър под вид на скрито поле в което състоянието е сериализирано и записано чрез Base64 кодиране)
- Валидиране и конвертиране на входните данни от компонентите
- Поддръжка на интернационализиране
- Навигация между страниците
- Генерира събития на сървъра в зависимост от действия от страна на клиента
- Стандартен набор от компоненти
- Възможност за създаване на потребителски библиотеки с JSP тагове
- Менаджирани бийнове (Managed Beans) - Представляват Java класове които са дефинирани в конфигурационен файл и JSF се грижи те да бъдат създадени при извикването им, или връщане ако вече са били създадени.
- Език за връзване на Java класове с компонентите (Expression Language)
- Генератор на изходен код (Renderer) - всяка JSF компонента съдържа свой собствен Renderer който се грижи за генериране на изходния код (HTML).

## [редактиране] Конфигуриране на JSF приложение

JSF е имплементиран като Servlet и за да работи правилно е необходимо Faces Sevlet да бъде описан в конфигурационния файл на приложениет (web.xml).

    <servlet>
      <servlet-name>Faces Servlet</servlet-name>
      <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
      <servlet-name>Faces Servlet</servlet-name>
      <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>

Главният файл за декларации е /WEB-INF/faces-config.xml, но могат и да се декларират множество конфигурационни файлове, което позволява лесно разделяне на приложението на модули. Декларирането на конфигурационни става с помощта на следният код в web.xml:

    <context-param>
      <param-name>javax.faces.CONFIG_FILES</param-name>
      <param-value>/WEB-INF/faces-config-admin.xml,/WEB-INF/faces-config-user.xml</param-value>
    </context-param>

Главният конфигурационен файл faces-config.xml не е необходимо да се включва към списъка.

## [редактиране] JSF компоненти

### [редактиране] Принцип на работа

Основната идея на технологията е да се имплементират компоненти които създават потребителският йнтерфейс. Компонентите са преизползваеми, което означава че веднъж написани те могат да се използват на различни места без да бъде повтарян или пренаписван техният код.

Компонентите представляват Java класове, които съдържат логика и генерират кода на потребителския интерфейс. Състоят се от три основни класа:

- ComponentTag - клас който служи за обработка на атрибутите подадени към JSP тага на съответната компонента
- Component - в него се описва логиката на компонентата
- Renderer - генерира изходният код (HTML в уеб приложенията)

Различните Renderer класове се описват в RenderKit който може да бъде заменян по време на работа и това позволява един и същ код на приложението да генерира изходен код за различни видове устройства - уеб браузъри, PDA устройства, WAP за мобилни телефони.

### [редактиране] Стандартни библиотеки

JSF предлага две стандартни компонентни библиотеки - JSF Core и JSF HTML.

#### [редактиране] JSF Core

Съдържа основни тагове за работа с JSF. Таговете от библиотеката JSF Core не са компоненти а са помощни тагове за работа с компоненти.

- f:view - оказва корена на дървото с компоненти. Трябва да бъде първата компонента в страницата.
- f:subView - страници кото са вложени в текущата трябва да бъдат поставени в subView (има се в предвид влагане чрез jsp:include)
- f:actionListener - добавя ActionListener към родителската компонента
- f:attribute - добавя атрибут към родителската компонента
- f:converter - служи за добавяне на конвертор към родителската компонентата
- f:convertDateTime - служи за конвертиране на дата записана в компонентата в която конверторът е вложен
- f:convertNumber - служи за конвертиране на числа записана в компонентата в която конверторът е вложен
- f:validator - служи за добавяне на валидатор към родителската компонентата
- f:validateLength - служи за добавяне на валидатор за дължина на въведеният текст в компонентата в която валидаторът е вложен
- f:validateLongRange - служи за добавяне на валидатор за интервалът на въведеното цяло число в компонентата в която валидаторът е вложен
- f:validateDoubleRange - служи за добавяне на валидатор за интервалът на въведеното дробно число в компонентата в която валидаторът е вложен
- f:facet - начин на именоване на дъщерна компонента. Поставена във facet дъщерната компонента може да бъде извлечена от родителската чрез името на facet.
- f:loadBundle - служи за използване на ResourceBundle .properties файлове
- f:param - служи за добавяне на параметър към заявката. Най-често се използва с h:commandLink
- f:selectItem - служи за добавяне на елемент към компоненти за избор (компоненти чиито имена започват с h:select. Пример: h:selectOneMenu)
- f:selectItems - служи за добавяне на множество от елементи към компоненти за избор. Множеството от елементи се подава като Map или масив/списък с обекти от тип SelectItem.
- f:verbatim - Главен недостатък на JSF е невъзможността в JSF компоненти да бъде вложен HTML код. За да стане това възможно HTML кодът трябва да бъде поставен във verbatim таг.

#### [редактиране] JSF HTML

Съдържа тагове за работа с основните JSF компоненти генериращи HTML код.

## [редактиране] Полезни връзки

- JSF RI. JSF имплементация на Sun.
- MyFaces JSF имплементация на Apache с отворен код
- Facelets Библиотека за построяване на дървета от JSF компоненти. Включва шаблонизация
- Ajax4Jsf AJAX библиотека за JSF

Взето от „http://bg.wikipedia.org../../../j/a/v/JavaServer_Faces_7fd0.html“.

Категория: Програмиране

##### Views

- Статия
- Беседа
- Текуща версия

##### Търсене

##### На други езици

- Català
- Česky
- Dansk
- Deutsch
- English
- Español
- Français
- Italiano
- Polski
- Português
- Русский
- Türkçe
- Tiếng Việt
- 中文