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