Введение в инфраструктуру JSF
Этот документ является первым в серии документов, в которых представлены основы использования инфраструктуры JavaServer Faces (JSF) для написания исходного кода веб-приложения в среде IDE NetBeans. В серии руководств описывается создание веб-приложения jAstrologer, принимающего имя пользователя и день рождения и возвращающего информацию о знаке Зодиака пользователя, камне, соответствующем знаку Зодиака, и гороскопе.
Инфраструктура JavaServer Faces является стандартным интерфейсом API Java для создания элементов пользовательского интерфейса в веб-приложениях. Инфраструктуру JSF можно считать комплектом средств, полным готовых к использованию элементов, которые можно быстро, просто и многократно использовать в веб-приложении. Эти элементы могут быть простыми, как текстовые поля ввода, получающие и хранящие пользовательские данные, либо более сложными, такими как поля отформатированной даты с календарем. Элементы встраиваются в страницы JSP и используют инфраструктуру для обработки переходов между различными страницами JSP.
Содержание

Для работы с этим руководством требуется программное обеспечение и ресурсы, перечисленные ниже.
| Среда IDE NetBeans |
Установка Web and Java EE
версия 6.1 или версия 6.0 |
| Комплект для разработчика на языке Java (JDK) |
версия 6 или версия 5 |
| GlassFish |
V2 |
Примечание: Сервер приложений GlassFish версии V2 Update Release 1 дополнительно входит в вариант установки "Web and Java EE" среды IDE NetBeans.
Создание веб-приложения с инфраструктурой JSF
Среда IDE NetBeans позволяет добавлять поддержку JSF к веб-приложению при создании нового проекта, а также к любому существующему проекту веб-приложения, открытому в среде IDE. Сервер GlassFish уже включает в себя библиотеки JSF; таким образом, отсутствует необходимость загружать или устанавливать их в сервере приложений. В этом примере поддержка JSF добавляется в ходе создания нового проекта веб-приложения.
- Выберите "File > New Project" (Ctrl-Shift-N) для открытия мастера создания проекта. В "Categories" выберите "Web"; в "Projects" выберите "Web Application". Нажмите кнопку "Next".
- Укажите имя проекта jAstrologer и определите его местоположение в системе, а затем нажмите кнопку "Next".
- На третьем экране мастера ("Server and Settings") выберите сервер GlassFish V2, установите версию Java EE как "Java EE 5", а затем нажмите кнопку "Next".
- Выберите пункт "JavaServer Faces" и нажмите кнопку "Finish".
Среда IDE создает шаблон проекта для всего приложения и открывает пустую страницу JSP (welcomeJSF.jsp) в редакторе исходного кода. Логическую структуру нового проекта можно просмотреть в окне "Projects" (Ctrl-1). Разверните узел проекта "Libraries > GlassFish V2". Следует отметить, что библиотеки JSF, например jsf-impl.jar, добавляются к пути к классам. Разверните "Configuration Files" и обратите внимание, что средой IDE был создан файл faces-config.xml, управляющий поведением элементов JSF в веб-приложении. Среда IDE также зарегистрировала сервлет "Faces" в дескрипторе развертывания web.xml. Сервлет "Faces" обрабатывает переходы между страницами JSP, управляемыми инфраструктурой JSF.

Создание страниц JSP
Создайте страницу JSP с именем greeting.jsp, на которой будет размещено приветствие и средства сбора информации о пользователе. Затем создайте страницу success.jsp, поздравляющую пользователя в ответ на получение данных из формы.
Создание страницы приветствия
- В окне "Projects" щелкните правой кнопкой мыши узел проекта и выберите "New > JSP". Присвойте файлу имя greeting. Убедитесь, что выбран пункт "JSP File (Standard Syntax)", и нажмите кнопку "Finish". В результате создается новый файл JSP, который открывается в редакторе исходного кода. Кроме того, следует отметить, что файл добавляется к узлу "Web Pages" в окне "Projects".
- В редакторе исходного кода объявите библиотеки тегов JSF в greeting.jsp. Для этого добавьте следующий код в начало файла:
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
Следует отметить, что можно использовать встроенную в среду IDE функцию автозавершения кода. Во время ввода нажмите комбинацию клавиш Ctrl-Space для отображения списка предложений по автозавершению, основанных на контексте. Таким образом, автозавершение кода может упростить добавление имен тегов и атрибутов, таких как, например, идентификаторы URI библиотек вкладок.
- Измените содержимое тегов title и h2 на Welcome to jAstrologer.
- Теперь добавьте форму JSF к файлу. В окне "Palette" (Ctrl-Shift-8) разверните категорию JSF. Имеется возможность перетаскивания элементов из палитры непосредственно в редактор исходного кода. Нажмите кнопку "JSF Form", перетащите элемент непосредственно под тег h2 и отпустите кнопку мыши. В появившемся диалоговом окне оставьте пункт "Empty Form" выбранным и нажмите кнопку "OK". Средой IDE добавляется следующий код (выделенный полужирным шрифтом):
<h2>Welcome to jAstrologer</h2>
<f:view>
<h:form>
</h:form>
</f:view>
- Для получения вводимой пользователем информации можно использовать элементы inputText и элемент commandButton для передачи формы. В редакторе исходного кода измените содержимое тегов <h:form> на следующее (изменения выделены полужирным шрифтом):
<f:view>
<h:form>
<p>Enter your name: <h:inputText value="name" /></p>
<p>Enter your birthday: <h:inputText value="birthday" /></p>
<h:commandButton value="Submit" action="submit" />
</h:form>
</f:view>
Для форматирования кода щелкните правой кнопкой мыши в редакторе исходного кода и выберите "Format" (Alt-Shift-F).
Создание страницы "Success"
Теперь создайте страницу JSP, на которой будет размещено поздравление.
- Создайте новый файл JSP, как было описано выше. Присвойте файлу имя success.
- Замените содержимое файла следующим кодом:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Congratulations</title>
</head>
<body>
<h2>Congratulations</h2>
<p>You've successfully registered with jAstrologer. </p>
</body>
Следует отметить, что файл до сих пор содержал только простой HTML, так что пока что отсутствует необходимость в объявлении библиотеки тегов JSF.
Настройка переходов по страницам
Управление переходами на странице в инфраструктуре JSF осуществляется при помощи faces-config.xml. Для каждой страницы JSP в проекте в faces-config.xml устанавливается правило перехода, содержащее один или более вариант перехода. Здесь можно просто отобразить действие передачи из commandButton в success.jsp; таким образом, что пользователь будет видеть сообщение об успешности операции независимо от того, что было введено в поля.
- В окне "Projects" дважды щелкните faces-config.xml для открытия файла в редакторе исходного кода. На панели инструментов над файлом нажмите кнопку "XML" для отображения файла в виде простого XML.
- Щелкните правой кнопкой мыши любое место в файле и выберите "Java ServerFaces > Add Navigation Rule". Введите /greeting.jsp в "Rule" из поля "View" и при необходимости введите описание правила.

Нажмите кнопку "Add". В faces-config.xml вводится следующий код:
<navigation-rule>
<description>
handle user input
</description>
<from-view-id>/greeting.jsp</from-view-id>
</navigation-rule>
- Снова щелкните правой кнопкой мыши внутри faces-config.xml и выберите "Java ServerFaces > Add Navigation Case". В появившемся диалоговом окне установите следующие значения:
- From View: /greeting.jsp
- From Outcome: submit
- To View: /success.jsp

Нажмите кнопку "Add". В faces-config.xml автоматически добавляется следующий код (изменения выделены полужирным шрифтом):
<navigation-rule>
<description>
handle user input
</description>
<from-view-id>/greeting.jsp</from-view-id>
<navigation-case>
<from-outcome>submit</from-outcome>
<to-view-id>/success.jsp</to-view-id>
</navigation-case>
</navigation-rule>
Настройка и запуск приложения
Настройте среду IDE для вывода на экран greeting.jsp при запуске приложения, после чего протестируйте приложение.
- В окне "Projects" щелкните правой кнопкой мыши узел проекта и выберите "Properties".
- Щелкните узел "Run" и введите /faces/greeting.jsp в поле "Relative URL". Это позволяет указать точку входа для приложения в среде IDE. Нажмите кнопку "OK".
- Щелкните правой кнопкой мыши узел проекта и выберите "Run" (F6). В среде IDE осуществляется сборка проекта, запуск сервера приложений и развертывание приложения, после чего во внешнем обозревателе по умолчанию открывается следующая страница:

После нажатия кнопки "Submit" отображается следующее:

Подключение базового компонента
В предыдущем разделе мы создали простое веб-приложение с элементами JSF. Однако веб-приложение пока что не делает ничего интересного. Для добавления к веб-приложениям JSF расширенных функциональных возможностей можно связать элементы UI с базовыми компонентами. Базовый компонент, также называемый управляемым компонентом JSF, является стандартным элементом JavaBeans, свойства и методы компонента которого доступны элементам JSF.
В этом разделе описано создание управляемого компонента UserBean, предоставляющего два свойства компонента: name и birthday.
- В окне "Projects" щелкните правой кнопкой мыши узел проекта и выберите "New > Other" (Ctrl-N). В категории "JavaServer Faces" выберите "JSF Managed Bean" и нажмите кнопку "Next".
- Назовите компонент UserBean и создайте новый пакет с именем astrologer.user для вставки в него компонента. Оставьте для всех остальных параметров значения по умолчанию и нажмите кнопку "Finish".
Среда IDE открывает UserBean.java в редакторе исходного кода и добавляет к faces-config.xml следующее объявление компонента:
<managed-bean>
<managed-bean-name>UserBean</managed-bean-name>
<managed-bean-class>astrologer.user.UserBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
- Добавьте к UserBean.java следующие объявления полей (выделенные полужирным шрифтом):
public class UserBean {
String name;
String birthday;
- Создайте методы получения и установки для полей: щелкните правой кнопкой мыши в любом месте в файле и выберите "Refactor > Encapsulate Fields". В появившемся диалоговом окне выберите параметры методов получения и установки для name и birthday, а затем нажмите кнопку "Refactor".

Уровень доступа для полей изменяется на private; в самом файле создаются методы получения и установки.
- Внесите следующие изменения в greeting.jsp (выделенные полужирным шрифтом).
<f:view>
<h:form>
<p>Enter your name: <h:inputText value="#{UserBean.name}" /></p>
<p>Enter your birthday: <h:inputText value="#{UserBean.birthday}" /></p>
<h:commandButton value="Submit" action="submit" />
</h:form>
</f:view>
При вводе изменений используйте средства автозавершения кода IDE для UserBeans.java и его свойств путем нажатия комбинации клавиш Ctrl-Space и выбора доступных параметров.
- Добавьте объявления JSF taglib к success.jsp. Их можно скопировать и вставить из greeting.jsp.
- Добавьте пустую форму JSF к success.jsp путем нажатия кнопки "JSF Form" в окне "Palette" (Ctrl-Shift-8) и ее перетаскивания непосредственно под теги <h2> в редакторе исходного кода.
- Внесите следующие изменения в success.jsp (изменения выделены полужирным шрифтом):
<h2>Congratulations</h2>
<f:view>
<h:form>
<p>You've successfully registered with jAstrologer. </p>
<p>Your name is <h:outputText value="#{UserBean.name}" /></p>
<p>Your birthday is <h:outputText value="#{UserBean.birthday}" /></p>
</h:form>
</f:view>
- В окне "Projects" щелкните правой кнопкой мыши узел проекта и выберите "Run". Та же самая страница greeting.jsp отображается в обозревателе при повторном развертывании и запуске приложения. Теперь при вводе значений и нажатии "Submit" success.jsp выводит на экран введенные значения, как показано ниже:

Дополнительная информация
В этом документе описано создание веб-приложения в среде IDE NetBeans с помощью инфраструктуры JSF. Продемонстрировано создание простой страницы JSP, использующей элементы JSF для получения вводимой пользователем информации, а также описана настройка переходов на странице. Показано создание управляемого компонента JSF, чтение и запись вводимой пользователем информации в свойства элемента.
Для получения дополнительных сведений об использовании других веб-инфраструктур в среде IDE NetBeans см. следующие материалы: