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 — Создание приложения. Если с вашим приложением все в порядке, это даст следующий результат.