jeudi 31 janvier 2013

Définition d'un managed bean

Posted on 10:17 by mabrouk


managed bean


Portée

Ce que l'on appelle portée d'un bean, dans le contexte des applications web, représente la durée de vie de ce bean en fonction de opérations menées à bien par l'utilisateur.
L'API servlet définit trois portées.
  • La requête : portée la plus courte, les beans attachés à une requête sont détruits une fois la réponse envoyée.
  • La session : une session est définie par en ensemble de cycles requêtes / réponses entre un même client et une application web. L'API servlet définit un cookie standard, JSESSIONID, pour reconnaître son client.
  • L'application : portée la plus longue. Un bean attaché à l'application vit tant que cette application vit, et est accessible de toutes les sessions ou requêtes.
La portée d'un managed bean se configure par annotation : @RequestScope@SessionScope et @ApplicationScope. Ces annotations se posent sur la classe du managed bean. La conséquence est qu'une même classe de managed bean ne peut pas avoir d'instances associées à des portées différentes. Ce n'est pas le cas dans l'API servlet, où l'on peut attacher n'importe quelle instance à n'importe quel portée.

Cycle de vie

Comme tous les composants managés, les managed bean ont un cycle de vie. On peut définir deux callbacks sur ce cycle de vie, en annotant deux méthodes :
  • @PostConstruct : cette méthode sera invoquée une fois le bean construit, mais avant son utilisation par le moteur JSF ;
  • @PreDestroy : cette méthode sera appelée juste avant la destruction du bean.
Comme d'habitude, la méthode appelée une fois le bean construit peut être utilisée pour préparer des connexions à des sources de données, entre autres.

Injection d'un managed bean dans un autre

JSF offre enfin un mécanisme simple d'injection de bean, ou de propriété d'un bean dans un managed bean  en utilisant l'annotation@ManagedProperty. La syntaxe est la suivante.
Exemple 5. Injection d'un managed bean
//
// Classe Capitaine
//
@ManagedBean(name="capitaine")
public class Capitaine {
    
    // contenu de la classe
}

//
// Classe Equipage
//
@ManagedBean(name="equipage")
public class Equipage {

    @ManagedProperty(value="#{capitaine}")
    private Capitaine capitaine ;
    
    // reste de la classe
}

Notons qu'à la différence de JPA, l'annotation doit être posée sur le champ, et que c'est le setter associé à ce champ qui sera systématiquement invoqué par le moteur JSF.

Liens

referencement google - navette aéroport paris - transport genève index adolescent
ExactSeek: Relevant Web Search