Managed Bean — это обычный класс Java Bean, зарегистрированный в JSF. Другими словами, Managed Beans — это Java-бин, управляемый средой JSF. Управляемый компонент содержит методы получения и установки, бизнес-логику или даже вспомогательный компонент (компонент содержит все значение формы HTML).
Управляемые компоненты работают как компонент Модель для пользовательского интерфейса. Доступ к управляемому бину можно получить со страницы JSF.
В JSF 1.2 управляемый бин должен был зарегистрировать его в файле конфигурации JSF, например FaceSconfig.xml. Начиная с JSF 2.0 , управляемые bean-компоненты могут быть легко зарегистрированы с помощью аннотаций. Этот подход хранит бобы и их регистрацию в одном месте, поэтому им становится легче управлять.
Использование конфигурации XML
<managed-bean> <managed-bean-name>helloWorld</managed-bean-name> <managed-bean-class>com.tutorialspoint.test.HelloWorld</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> <managed-bean> <managed-bean-name>message</managed-bean-name> <managed-bean-class>com.tutorialspoint.test.Message</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean>
Использование аннотации
@ManagedBean(name = "helloWorld", eager = true)
@RequestScoped
public class HelloWorld {
@ManagedProperty(value = "#{message}")
private Message message;
...
}
@ManagedBean Аннотация
@ManagedBean помечает bean-компонент как управляемый bean-компонент с именем, указанным в атрибуте name. Если атрибут name не указан, то имя управляемого компонента будет по умолчанию равным части имени класса полного имени класса. В нашем случае это был бы helloWorld.
Другим важным атрибутом является стремление . Если eager = «true», то управляемый bean-компонент создается до того, как он будет запрошен в первый раз, в противном случае используется «ленивая» инициализация, в которой bean-компонент будет создан только при его запросе.
Аннотации области
Аннотации области действия определяют область, в которую будет помещен управляемый компонент. Если область не указана, то bean-компонент по умолчанию будет запрашивать область. Каждая область кратко обсуждается в следующей таблице.
| S.No | Область применения и описание |
|---|---|
| 1 |
@RequestScoped Бин живет до тех пор, пока живет HTTP-запрос-ответ. Он создается по запросу HTTP и уничтожается, когда заканчивается ответ HTTP, связанный с запросом HTTP. |
| 2 |
@NoneScoped Бин живет так же долго, как одна оценка EL. Он создается после оценки EL и уничтожается сразу после оценки EL. |
| 3 |
@ViewScoped Бин живет до тех пор, пока пользователь взаимодействует с одним и тем же представлением JSF в окне / вкладке браузера. Он создается по HTTP-запросу и уничтожается, когда пользователь выполняет обратную передачу в другое представление. |
| 4 |
@SessionScoped Бин живет до тех пор, пока живет HTTP-сессия. Он создается при первом HTTP-запросе с участием этого компонента в сеансе и уничтожается при аннулировании сеанса HTTP. |
| 5 |
@ApplicationScoped Бин живет до тех пор, пока живет веб-приложение. Он создается при первом HTTP-запросе, включающем этот компонент в приложении (или когда веб-приложение запускается, а в @ManagedBean устанавливается атрибут eager = true), и уничтожается при закрытии веб-приложения. |
| 6 |
@CustomScoped Бин живет до тех пор, пока действует запись бина в пользовательской карте, созданной для этой области. |
@RequestScoped
Бин живет до тех пор, пока живет HTTP-запрос-ответ. Он создается по запросу HTTP и уничтожается, когда заканчивается ответ HTTP, связанный с запросом HTTP.
@NoneScoped
Бин живет так же долго, как одна оценка EL. Он создается после оценки EL и уничтожается сразу после оценки EL.
@ViewScoped
Бин живет до тех пор, пока пользователь взаимодействует с одним и тем же представлением JSF в окне / вкладке браузера. Он создается по HTTP-запросу и уничтожается, когда пользователь выполняет обратную передачу в другое представление.
@SessionScoped
Бин живет до тех пор, пока живет HTTP-сессия. Он создается при первом HTTP-запросе с участием этого компонента в сеансе и уничтожается при аннулировании сеанса HTTP.
@ApplicationScoped
Бин живет до тех пор, пока живет веб-приложение. Он создается при первом HTTP-запросе, включающем этот компонент в приложении (или когда веб-приложение запускается, а в @ManagedBean устанавливается атрибут eager = true), и уничтожается при закрытии веб-приложения.
@CustomScoped
Бин живет до тех пор, пока действует запись бина в пользовательской карте, созданной для этой области.
@ManagedProperty Аннотация
JSF — это простая статическая структура внедрения зависимостей (DI). Используя аннотацию @ManagedProperty , свойство управляемого компонента может быть внедрено в другой управляемый компонент.
Пример приложения
Давайте создадим тестовое приложение JSF, чтобы протестировать приведенные выше аннотации для управляемых bean-компонентов.
| шаг | Описание |
|---|---|
| 1 | Создайте проект с именем helloworld в пакете com.tutorialspoint.test, как описано в главе JSF — Создание приложения . |
| 2 | Измените HelloWorld.java, как описано ниже. Оставьте остальные файлы без изменений. |
| 3 | Создайте Message.java в пакете com.tutorialspoint.test, как описано ниже. |
| 4 | Скомпилируйте и запустите приложение, чтобы убедиться, что бизнес-логика работает в соответствии с требованиями. |
| 5 | Наконец, соберите приложение в виде файла war и разверните его на веб-сервере Apache Tomcat. |
| 6 | Запустите ваше веб-приложение, используя соответствующий URL-адрес, как описано ниже в последнем шаге. |
HelloWorld.java
package com.tutorialspoint.test;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
@ManagedBean(name = "helloWorld", eager = true)
@RequestScoped
public class HelloWorld {
@ManagedProperty(value = "#{message}")
private Message messageBean;
private String message;
public HelloWorld() {
System.out.println("HelloWorld started!");
}
public String getMessage() {
if(messageBean != null) {
message = messageBean.getMessage();
}
return message;
}
public void setMessageBean(Message message) {
this.messageBean = message;
}
}
Message.java
package com.tutorialspoint.test;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean(name = "message", eager = true)
@RequestScoped
public class Message {
private String message = "Hello World!";
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
home.xhtml
<!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">
<head>
<title>JSF Tutorial!</title>
</head>
<body>
#{helloWorld.message}
</body>
</html>
Когда вы будете готовы со всеми внесенными изменениями, давайте скомпилируем и запустим приложение, как мы делали в главе JSF — Создание приложения. Если с вашим приложением все в порядке, это даст следующий результат.