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

Struts 1 Java Discussion :

Plusieurs beans pour un même formulaire ?


Sujet :

Struts 1 Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Plusieurs beans pour un même formulaire ?
    Bonjour à tous,

    Je débute avec Struts et je souhaiterai mettre en oeuvre un bean avec le scope "application" : Ce bean sera rempli avec plusieurs listes statiques, chacune récupérant des enregistrements extraits d'une base.

    Je souhaiterai donc remplir ce bean et l'utiliser dans plusieurs de mes formulaires (listes déroulantes type "nationalités", "départements", etc.), limitant ainsi la connexion à la base de données.

    Les données "dynamiques" relatives aux saisies utilisateurs seraient quant à elles stockées dans des beans de portée "request" voire "session".

    Cependant, vu qu'il n'est possible à un formulaire d'associer plusieurs beans (du moins, je n'ai pas encore trouvé la solution), avez-vous quelques idées ?

    Merci !

  2. #2
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Points : 475
    Points
    475
    Par défaut
    rien ne t'empêche de mettre le contenu des "plusieurs beans" dans un même formulaire.

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Donc, si je comprends, j'ai 1 seul objet de type "Form" qui possède mes beans comme attributs :
    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
     
    public class MonForm {
    private List<Nationalite> nationalites = ...
    private List<Departement> departements =...
    private String nom = ...
     
    public List getNationalites()
    public List seTNationalites(List<Nationalite> nationalites)
     
    public List getDepartements()
    public List setDepartements(List<Departement> departements)
     
    public List getNom()
    public List setNom(String nom)
    }
    Et dans mon fichier struts-config.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ...
    <form-beans>
      <form-bean name="monForm" type="fr.test.form.MonForm" />
    </form-beans>
    ...
    <action path="/pageTest1" input=".tilesPageTest1" name="monForm" scope="request" type="fr.test.action.PageTest1Action">
    ...
    </action>
    <action path="/pageTest2" input=".tilesPageTest2" name="monForm" scope="request" type="fr.test.action.PageTest2Action">
    ...
    </action>
    Pour chacune des actions pageTest1 et pageTest2, un formulairé s'affiche dans lequel on retrouve des listes de sélections "nationalites" et "departements" ainsi que des champs textes tel "nom". Ce que je souhaiterai faire, c'est que les beans departement et nationalite soient geres dans le scope application, de telle sorte que je ne serai pas oblige de faire une requete sur la base a chaque fois afin de recuperer les beans.

    Mais je ne vois malheureusement pas comment definir le scope pour les "beans" nationalites et departements afin qu'ils soient de type "Application".

  4. #4
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Points : 475
    Points
    475
    Par défaut
    Le scope que tu defini porte sur ton form et son contenu par conséquent.

  5. #5
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Premièrement, il me semble que tu ne peux pas stocker un form-bean dans le scope application.

    Deuxièmement, les listes n'étant destinées qu'à l'affichage, je ne vois pas bien l'intérêt de les définir dans un form-bean.

    Tu pourrais donc plutôt mettre chacune des listes dans le scope application comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    this.getServletContext().setAttribute("departements",departements);
    this.getServletContext().setAttribute("nationalites",nationalites);
    Modératrice Java - Struts, Servlets/JSP, ...

  6. #6
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Merci pour chacunes de vos indications.

    Je pensais, à tort, que les form-beans étaients obligatoires pour peupler les formulaires...

    Du coup, dans la solution proposée par c_nvy, à quel moment vais-je indiquer à mon application Struts de charger les listes "departements" et "nationalites" ?
    Puisque je dispose d'un formulaire de login, est-ce l'endroit propice pour effectuer la connexion à la base de données, récupérer les listes, et les stocker dans la ServletContext ? Quelle est la façon la plus propre pour effectuer ce chargement ?

    Merci !

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par aurelG Voir le message
    Je pensais, à tort, que les form-beans étaients obligatoires pour peupler les formulaires...
    Le bean ActionForm est là pour récupérer les données de ton formulaire.
    Il n'est pas obligatoire d'y mettre les listes nécessaires à la constitution de certains objets d'IHM comme les combo ou autres liste.

    Pour ce qui est du scope application, on peut y mettre n'importe quel objet via setAttribute(...)

    Pour le chargement des listes du scope application, il serait souhaitable de créer une servlet à démarrage automatique pour la constitution des éléments.
    Dans le web.xml, tu auras une ligne de ce type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      <servlet>
        <servlet-name>Start</servlet-name>
        <servlet-class>com.obia.safe.servlet.Start</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
    et la servlet
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    package com.obia.safe.servlet;
     
    import java.util.List;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import org.apache.log4j.Logger;
    import com.obia.safe.hibernate.dao.pays.PaysDao;
    import com.obia.safe.hibernate.dao.utilisateur.UtilisateurDao;
    import com.obia.safe.hibernate.entity.Pays;
    import com.obia.safe.hibernate.entity.Utilisateur;
     
    public class Start extends HttpServlet
    {
        private static final long serialVersionUID = 1;
        private static final Logger logger = Logger.getLogger(Start.class);
     
        @Override
        public void init(ServletConfig config) throws ServletException
        {
            super.init(config);
            try
            {
                List<Pays> list = PaysDao.getInstance().listAll();
                config.getServletContext().setAttribute("ListePays", list);
     
                List<Utilisateur> users = UtilisateurDao.getInstance().listAll();
                config.getServletContext().setAttribute("ListeUtilisateurs", users);
            }
            catch (Exception e)
            {
                logger.error(e.toString());
            }
        }
     
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Merci pour les éléments proposés par chacun
    La solution notamment proposée par OButterlin semble remplir le comportement attendu. Petite question subsidiaire : Est-ce la seule méthode pour disposer de beans "ayant" le scope application.
    Merci à tous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/03/2012, 11h30
  2. Plusieurs pages de destinations pour un même formulaire
    Par pythéas dans le forum Balisage (X)HTML et validation W3C
    Réponses: 18
    Dernier message: 06/03/2008, 12h55
  3. Plusieurs Beans dans le même formulaire
    Par AlienQueen dans le forum Struts 1
    Réponses: 2
    Dernier message: 19/11/2006, 19h21
  4. Plusieurs destinations pour un même formulaire
    Par dessinateurttuyen dans le forum Langage
    Réponses: 14
    Dernier message: 01/08/2006, 14h13
  5. Plusieurs vues pour le même objet
    Par nicolas66 dans le forum OpenGL
    Réponses: 4
    Dernier message: 25/10/2004, 10h27

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