Учебники

JSF — Управляемые бобы

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