IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

ICEFACES/Spring - Initialisation d'un bean


Sujet :

JSF Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7
    Par défaut ICEFACES/Spring - Initialisation d'un bean
    Bonjour,

    Ce sujet traite de l'initialisation des données d'un Bean de présentation en utilisant des données des couches services
    Les frameworks utilisés sont :
    - Spring 2.5
    - Icefaces 1.8.2

    Deux beans :
    - Un bean présentation
    - Un bean service contenant les données

    Le code de ma classe "exemple" est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    @Component
    @Scope(value = "request")
    public class BeanPresentation {
      @Autowired
      private IBeanService service;
     
      public BeanPresentation() {
        // constructeur
      }
      @PostConstruct
      public void init() {
        // méthode init
      }
     
    }
    Constat:
    1 - l'initialisation avec le constructeur est impossible car l'attribut service est null.
    2 - l'initialisation avec la méthode init() est possible mais à chaque requête cette méthode est exécutée.

    Question :

    Comment faire pour avoir une méthode d'initialisation qui s'exécute une seule fois à l'entrée d'une page et non à chaque requête au seins d'une même page ?

    Cordialement.

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    ton bean est en scope request, donc, il sera réinitialiser pour chaque requete, donc, si tu veux qu'il soit instancié une seule fois, il faut le mettre en scope session.
    avec richfaces il est possible de le faire avec un composant keepAlive, avec seam il y'a un scope conversation, et je pense que tomahawk aussi dispose d'un composant pour garder un bean request durant plusieurs requêtes, avec ICEFaces je ne suis pas sur que cela est possible.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7
    Par défaut
    Bonjour,

    Merci pour la réponse.

    Une petite précision. Le plugin Icefaces pour NetBeans offre des classes "utilitaires" "AbstractPageBean", "AbstractSessionBean" ... pour toutes les portées de l'application.

    Quand on étend le Bean de présentation de portée request par AbstractPageBean (par exemple), on peut redéfinir une méthode init() qui permet de produire le comportement attendu : une seule initialisation pour une page, si on clique sur 50 boutons de la page, la méthode init() n'est pas relancée.

    Voici le code en utilisant le plugin Icefaces de NetBeans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    @Component
    @Scope(value = "request")
    public class BeanPresentation extends AbstractPageBean {
      @Autowired
      private IBeanService service;
     
      public BeanPresentation() {
        // constructeur
      }
      @Override
      public void init() {
        // méthode init
      }
     
    }
    J'ose à croire que c'est possible même en portée request.

    Ce que je voudrais faire c'est me détacher de ce plugin Icefaces et réaliser ce mécanisme moi même.

    Cordialement.

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Salut,

    Si tu cherches a ce que ton attribut service soit pas nul car tu l'a crée via Spring, il suffit de le passer à ton bean via ton facesConfig, on rajoutant une managed-property, ex :

    ds la def du bean BeanPresentation ds facesConfig rajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                    <managed-property>
    			<property-name>service</property-name>
    			<value>#{BeanServiceImpl}</value>
    		</managed-property>
    Comme ça a chaque création d'une instance de BeanPresentation l'attribut service sera automatiquement seté

Discussions similaires

  1. [Spring + Struts]Injecter un bean dans un plugin Struts
    Par Saverok dans le forum Spring Web
    Réponses: 1
    Dernier message: 18/12/2008, 15h18
  2. [Spring][Modules] Validator de beans
    Par KiLVaiDeN dans le forum Spring
    Réponses: 4
    Dernier message: 31/07/2007, 13h46
  3. Initialisation d'un bean avec arguments
    Par ruda.tom dans le forum Spring
    Réponses: 6
    Dernier message: 23/03/2007, 21h53
  4. Réponses: 12
    Dernier message: 24/05/2006, 15h37
  5. [Struts]Pb d'initialisation d'un Bean !
    Par Ho(c)ine. dans le forum Struts 1
    Réponses: 4
    Dernier message: 26/08/2004, 22h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo