JSF - Управляемые компоненты
Managed Bean - это обычный класс Java Bean, зарегистрированный в JSF. Другими словами, Managed Beans - это Java-компонент, управляемый фреймворком JSF. Управляемый bean-компонент содержит методы получения и установки, бизнес-логику или даже вспомогательный bean-компонент (bean-компонент содержит все значения HTML-формы).
Управляемые компоненты работают как модель для компонента пользовательского интерфейса. Доступ к управляемому компоненту можно получить со страницы JSF.
В JSF 1.2, управляемый компонент должен был зарегистрировать его в файле конфигурации JSF, таком как facesconfig.xml. ИзJSF 2.0и далее управляемые компоненты можно легко зарегистрировать с помощью аннотаций. Такой подход хранит компоненты и их регистрацию в одном месте, что упрощает управление.
Использование конфигурации 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помечает компонент как управляемый компонент с именем, указанным в атрибуте name. Если атрибут name не указан, то имя управляемого bean-компонента по умолчанию будет частью имени класса от полного имени класса. В нашем случае это helloWorld.
Еще один важный атрибут - eager. Если eager = "true", то управляемый bean-компонент создается до того, как он запрашивается в первый раз, в противном случае используется «ленивая» инициализация, при которой bean-компонент будет создан только тогда, когда он будет запрошен.
Аннотации области действия
Аннотации области устанавливают область, в которую будет помещен управляемый компонент. Если область действия не указана, то bean-компонент по умолчанию будет запрашивать область действия. Каждая область кратко обсуждается в следующей таблице.
S.No | Объем и описание |
---|---|
1 | @RequestScoped Бин живет, пока живет HTTP-запрос-ответ. Он создается по HTTP-запросу и уничтожается, когда HTTP-ответ, связанный с HTTP-запросом, завершен. |
2 | @NoneScoped Бин живет столько, сколько стоит одна оценка EL. Он создается при оценке EL и уничтожается сразу после оценки EL. |
3 | @ViewScoped Bean живет до тех пор, пока пользователь взаимодействует с одним и тем же представлением JSF в окне / вкладке браузера. Он создается по HTTP-запросу и уничтожается, когда пользователь выполняет обратную передачу в другое представление. |
4 | @SessionScoped Бин живет, пока живет HTTP-сеанс. Он создается при первом HTTP-запросе, включающем этот компонент в сеансе, и уничтожается, когда HTTP-сеанс становится недействительным. |
5 | @ApplicationScoped Бин живет, пока живет веб-приложение. Он создается при первом HTTP-запросе, включающем этот bean-компонент в приложении (или когда веб-приложение запускается и атрибут eager = true установлен в @ManagedBean), и уничтожается при завершении работы веб-приложения. |
6 | @CustomScoped Bean живет до тех пор, пока живет запись bean в пользовательской карте, созданной для этой области. |
@ManagedProperty Аннотация
JSF - это простая структура статического внедрения зависимостей (DI). С помощью@ManagedProperty аннотации, свойство управляемого bean-компонента может быть введено в другой управляемый bean-компонент.
Пример приложения
Давайте создадим тестовое приложение JSF для тестирования приведенных выше аннотаций для управляемых компонентов.
Шаг | Описание |
---|---|
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 - Создание приложения». Если с вашим приложением все в порядке, это даст следующий результат.