JSF - Beans gérés

Managed Bean est une classe Java Bean standard enregistrée avec JSF. En d'autres termes, Managed Beans est un bean Java géré par le framework JSF. Managed bean contient les méthodes getter et setter, la logique métier ou même un bean de sauvegarde (un bean contient toute la valeur du formulaire HTML).

Les beans gérés fonctionnent comme modèle pour le composant d'interface utilisateur. Managed Bean est accessible à partir de la page JSF.

Dans JSF 1.2, un bean géré devait l'enregistrer dans le fichier de configuration JSF tel que facesconfig.xml. DeJSF 2.0à partir de là, les beans gérés peuvent être facilement enregistrés à l'aide d'annotations. Cette approche maintient les beans et leur enregistrement à un seul endroit, ce qui facilite la gestion.

Utilisation de la configuration 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>

Utilisation de l'annotation

@ManagedBean(name = "helloWorld", eager = true)
@RequestScoped
public class HelloWorld {
   @ManagedProperty(value = "#{message}")
   private Message message;
   ...
}

Annotation @ManagedBean

@ManagedBeanmarque un bean comme étant un bean géré avec le nom spécifié dans l'attribut name. Si l'attribut name n'est pas spécifié, le nom du bean géré prendra par défaut la partie nom de classe du nom de classe pleinement qualifié. Dans notre cas, ce serait helloWorld.

Un autre attribut important est eager. Si eager = "true" alors le bean géré est créé avant qu'il ne soit demandé pour la première fois, sinon l'initialisation "paresseuse" est utilisée dans laquelle le bean sera créé uniquement quand il est demandé.

Annotations de portée

Les annotations de portée définissent la portée dans laquelle le bean géré sera placé. Si la portée n'est pas spécifiée, le bean demandera par défaut la portée. Chaque champ d'application est brièvement décrit dans le tableau suivant.

S. Non Portée et description
1

@RequestScoped

Bean vit aussi longtemps que la requête-réponse HTTP vit. Il est créé sur une requête HTTP et est détruit lorsque la réponse HTTP associée à la requête HTTP est terminée.

2

@NoneScoped

Bean vit aussi longtemps qu'une seule évaluation EL. Il est créé lors d'une évaluation EL et est détruit immédiatement après l'évaluation EL.

3

@ViewScoped

Bean vit tant que l'utilisateur interagit avec la même vue JSF dans la fenêtre / l'onglet du navigateur. Il est créé sur une requête HTTP et est détruit une fois que l'utilisateur publie une autre vue.

4

@SessionScoped

Bean vit aussi longtemps que la session HTTP vit. Il est créé lors de la première requête HTTP impliquant ce bean dans la session et est détruit lorsque la session HTTP est invalidée.

5

@ApplicationScoped

Bean vit aussi longtemps que l'application Web vit. Il est créé lors de la première requête HTTP impliquant ce bean dans l'application (ou lorsque l'application Web démarre et que l'attribut eager = true est défini dans @ManagedBean) et est détruit lorsque l'application Web s'arrête.

6

@CustomScoped

Bean vit aussi longtemps que l'entrée du bean dans la carte personnalisée, qui est créée pour cette étendue, vit.

Annotation @ManagedProperty

JSF est un framework d'injection de dépendances (DI) statique simple. En utilisant@ManagedProperty annotation, la propriété d'un bean géré peut être injectée dans un autre bean géré.

Exemple d'application

Créons une application JSF de test pour tester les annotations ci-dessus pour les beans gérés.

Étape La description
1 Créez un projet avec un nom helloworld sous un package com.tutorialspoint.test comme expliqué dans le chapitre JSF - Créer une application .
2 Modifiez HelloWorld.java comme expliqué ci-dessous. Gardez le reste des fichiers inchangés.
3 Créez Message.java sous un package com.tutorialspoint.test comme expliqué ci-dessous.
4 Compilez et exécutez l'application pour vous assurer que la logique métier fonctionne conformément aux exigences.
5 Enfin, créez l'application sous la forme d'un fichier war et déployez-la dans Apache Tomcat Webserver.
6 Lancez votre application Web en utilisant l'URL appropriée, comme expliqué ci-dessous à la dernière étape.

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>

Une fois que vous êtes prêt avec tous les changements effectués, laissez-nous compiler et exécuter l'application comme nous l'avons fait dans le chapitre JSF - Créer une application. Si tout va bien avec votre application, cela produira le résultat suivant.