Общие сведения о приложении JavaServer Faces
Проходя этот урок, мы будем использовать JavaServer Faces (JSF) в качестве технологии "просмотра", чтобы изучить основы JSF.
Что такое JavaServer Faces?
Технология JavaServer Faces была принята в качестве спецификации на платформе Java Enterprise Edition (Java EE) в составе Java EE 5 (2006). Изначально JSF использовал Java Server Pages (JSP) для отрисовки HTML-страниц. Начиная с версии 2.0 использовался Facelets, который ближе к обычному HTML.
JSF — это исполняющая среда на основе компонентов. Состояние каждого компонента сохраняется в зависимости от взаимодействия с клиентом. Состояние сохраняется при запросе новой страницы и восстанавливается при возвращении.
Базовые функции JSF
Приложения JSF делятся на две категории:
- Facelets: обработчик шаблонов на основе XHTML, описывающий макеты экрана
- BackingBean: класс Java, который привязывается к Facelets и задает и обрабатывает значения
Facelets
— это механизм шаблонов на основе XHTML, который описывает макеты экрана, написанные на XHTML. XHTML соответствует правилам определения типа документа (DTD), определенным в консорциуме W3C, и описывается как файл с расширением xhtml
.
BackingBean
— это класс Java, связанный со страницей JSF. Он содержит методы действий, прослушиватели действий и прослушиватели изменения значений. В Java EE 6 классы backing bean реализованы с помощью управляемых bean-компонентов JSF. Начиная с версии Java EE 7, в качестве реализации используются bean-компоненты контекстов и внедрения зависимостей (CDI).
Создание страницы JSF с помощью PrimeFaces
PrimeFaces — это сторонняя реализация JSF, которая упрощает создание веб-компонентов JSF. PrimeFaces — это упрощенная библиотека с одним JAR, нулевой конфигурацией и без зависимостей. Вам нужно просто загрузить PrimeFaces, добавить primefaces-{version}.jar в путь классов и импортировать пространство имен, чтобы приступить к работе, как показано в xmlns:p="http://primefaces.org/ui"
.
Давайте рассмотрим пример. На следующей странице PrimeFaces теги p:outputLabel
, p:inputText
и p:commandButton
используются для отображения меток, полей ввода и кнопок.
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui" >
<h:head>
<title>Input Value Counter Sample</title>
</h:head>
<h:body>
<h:form>
<p:outputLabel value="Basic"/><br/>
<p:inputText value="#{indexcontroller.inputValue}"/><br/>
<p:commandButton value="Submit" action="#{indexcontroller.submitButtonAction()}"/><br/>
</h:form>
</h:body>
</html>
При написании предыдущего кода XHTML появится следующий экран:
Поддержка PrimeFaces Ajax
JSF поддерживает приложения Ajax по умолчанию. Вы можете динамически обновлять часть экрана без обновления всего экрана.
PrimeFaces использует атрибут update
, чтобы упростить реализацию поддержки Ajax, предоставляемой JSF. Укажите, какой компонент следует обновить, с помощью его идентификатора. В следующем примере атрибут update ="ajaxUpdateText"
добавляется в p:commandButton
, поэтому часть <div id ="ajaxUpdateText">
обновляется при выборе кнопки. Здесь можно указать любой id
HTML-компонент.
<div id="ajaxUpdateText">
...
</div>
<p:commandButton update="ajaxUpdateText"
value="Submit" action="#{indexcontroller.submitButtonAction()}"/>
JSF backing bean
Backing bean — это классы Java, которые реализуют серверную обработку, связанную с представлением JSF. В следующем примере мы будем ссылаться на класс backing bean, IndexController
, связанный с приведенным ранее XHTML. Мы будем использовать заметки @Named
для настройки приложения JSF, чтобы на него можно было ссылаться из JSF Facelets.
При записи <p: inputText value ="#{indexcontroller.inputValue}"/>
в Facelets на экране будет отображаться поле Ввод текста. Введенное значение привязано к inputValue
, определенному в классе IndexController
.
Кроме того, при написании <p:commandButton value ="Submit" action="#{indexcontroller.submitButtonAction()}"/>
появится кнопка HTML. При нажатии на кнопку вызывается метод submitButtonAction()
, определенный в классе IndexController
.
import java.io.Serializable;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import lombok.Getter;
import lombok.Setter;
@Named("indexcontroller")
@ViewScoped
public class IndexController implements Serializable {
private static final long serialVersionUID = 8485377386286855408L;
@Setter @Getter
private String inputValue;
private int counter;
public void submitButtonAction(){
inputValue = inputValue + " : " + counter;
counter++;
}
}
Таким образом JSF позволяет реализовать представление (Facelets) и контроллер (класс backing bean) для отдельной реализации экрана.
В этом уроке мы познакомились с JSF. В следующем уроке мы создадим приложение JSF и запустим его локально.