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 :

[Débutant][Struts] Quel bean pour remplir un select?


Sujet :

Struts 1 Java

  1. #21
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Par défaut
    je n'ai donc pas le moyen de le mettre en request au second passage dans mon execute()?
    je suis obligé de le mettre en session? j'aime pas trop mettre des trucs en session, parce qu'après je sais jamais si une ancienne valeur est gardée etc... alors qu'avec le request je suis sur que la valeur est détruite après affichage de la page.

  2. #22
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Par défaut
    Tu as parfaitement raison d'éviter de mettre trop de choses en session mais par contre, y a des fois où c'est inévitable.

    Je pense que tu as bien compris la problématique donc maintenant il ne te reste plus qu'à jongler avec les paramètres de request, les attributs de request et les attributs de session. Où est le problème exactement?

    Si tu veux être sûr du contenu de ce que tu comptes avoir dans tes variables, met des traces avec un System.out.println()

    Par exemple, dans ton execute met le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Enumeration reqParams = request.getParameterNames();
    String param = null;
    while (reqParams.hasMoreElements())
    {
    	param = (String) reqParams.nextElement();
    	System.out.println(" --- Param : " + param + " = " + request.getParameter(param));
    }
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  3. #23
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Par défaut
    Ben écoute mon problème le voilà :

    Si tu as réussi à comprendre mon code, je passe 2 fois par la méthode execute().

    Une première fois pour afficher la combo et une seconde pour rediriger vers la vue.
    Cette vue a besoin de la valeur que l'utilisateur a choisi via la combo.

    et cette valeur je n'arrive pas à la passer à la vue ! je m'arrache les cheveux depuis 30mn !!

    J'ai d'abord essayé de remmettre la variable en request juste avant le mapping.forward() vers la vue, ca passe pas.
    Ensuite j'ai éssayé ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      public ActionForward execute(ActionMapping mapping, ActionForm  form, HttpServletRequest request, HttpServletResponse response) throws Exception {
     
            ChoixAgentForm c=(ChoixAgentForm) form;
            c.setListeAgents(new AgentMetier().getListePourSelect());
     
            if (request.getParameter("idAgent")!=null){
                request.getSession().setAttribute("id",new String("aha"));
                return mapping.findForward("afficheListeArrets");
            } else{
                return mapping.findForward("afficheListeAgents");
            }
        }
    J'ai voulu placer une variable nommée "id" et qui contient la String "aha" mais toujours pareil, une fois dans la vue je n'arrive pas à afficher la valeur de la variable de session "id".

    peut-être que c'est mon code de la vue qui est mauvais, parce que dans le moniteur http je vois bien la variable qui se met en session !

    voici le code de la vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
     
            <h2>Liste des arrets</h2> 
     
    <bean:page id="seb" property="id" />
    <bean:write name="seb"/>
    Je comprend vraiment plus rien lol

  4. #24
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Par défaut
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <bean:write name="id"/>
    ça fait quoi?
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  5. #25
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Par défaut
    Attends de toute facon je pense faire autrement parce que le but final si tu veux c'est d'afficher un tableau dans ma vue.

    Ce tableau est construit à partir d'une requete sql qui prend en paramètre l'id retourné par le select.

    Donc dans la méthode execute(), au second passage donc dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     if (request.getParameter("idAgent")!=null){
                request.getSession().setAttribute("id",new String("aha"));
                return mapping.findForward("afficheListeArrets");
            }
    Il faut que j'appelle ma methode en lui passant l'id retourné par le select, puis que je place la collection retournée par la méthode en session afin de pouvoir itérer dessus dans ma vue.

    Je pense qu'il faut que je la place en session, par que je vais avoir des modifs à faire via des formulaires sur les données de la collection avant de les réinjecter dans la base de données.

  6. #26
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Par défaut
    Ok, sinon moi j'utilise JSTL souvent donc un <c:out.../> était plus facile à faire pour l'exemple.

    Attention, mieux vaut tester ta variable de request à null et aussi à "non vide" pour plus de sûreté.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  7. #27
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Par défaut
    J'ai un problème qui n'a pas grand chose à voir avec le select maintenant...

    tu vois l' "id" que je récupère dans le select c'est l'identifiant en bdd d'une personne (la clé primaire quoi).

    Et dans mon appli, je dois gerer les arrets maladie du personnel, donc j'ai une table "Arrets" qui représente un arret maladie, et dans laquelle j'ai en clé étrangère un champ "idAgent" pour faire le lien avec la personne concernée par l'arret.

    Concernant la couche données, j'ai représenté la table Arrets par un ArretBean qui contient tous les champs et getter/setters de la table.

    J'ai ensuite ArretDAO qui est la classe qui contient toutes les requetes SQL sur la table Arret.

    donc lorsque j'appelle la méthode getAllArrets(int idAgent) sur un objet de la classe AgentDAO, je me retrouve avec un vecteur de ArretBean.

    J'ai donc tous les arrets d'un agents dans une collection, et je voudrais les afficher dans une table html situé dans ma vue.

    Mais le problème, c'est que dans la table Arret j'ai par exemple un champ "motifArret" qui est une clé étrangère vers la table "Motifs" qui n'a que 2 champs : MOTIFS(noMotif, libelle)

    Et il faut donc que quelque part je fasse la conversion de l'attribut "noMotif" de chaque ArretBean, en string avant de l'afficher dans la table html.

    Et je ne sais pas à quel endroit faire cette conversion.

    Bien sur dans ma couche modèle, j'ai la classe MotifArretBean qui représente le motif d'un arret, ainsi que MotifArretBeanDAO, qui contient la méthode "public String getLibelle(int idMotifArret)" nécessaire à la conversion.

    j'éspère que c'est compréhensible, en tout cas merci beaucoup pour toute ton aide !

  8. #28
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Par défaut
    Euh difficile de bien tout comprendre.

    Dans ce que tu montres, tu as un "getLibelle(int idMotifArret)", ce qui laisse entendre une conception inadaptée... C'est l'instance particulière qui doit retourner son libellé et non une méthode (qui pourrait être statique finalement) comme cela semble être le cas. Donc, essaye de revoir un peu ton implémentation en essayant de respecter la convention JavaBean setToto(toto) et getToto() de manière à rester "objet" (si possible).

    D'autre part, il faut te débrouiller de constituer la liste des valeurs de ton tableau au sein de l'Action et non dans la JSP. De cette manière, ta JSP n'a plus qu'à itérer sur une liste pour en afficher le contenu (tout préstructuré), on évite ainsi le mélange de code Java et de balises.

    Voilà, bon courage
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  9. #29
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Par défaut
    Super, tu as raison, je dois mettre le getLibelle() dans le javaBean, la dessus tu as tout bon !!

    par contre imaginons que j'ai un vecteur qui contient des ArretBean.

    un ArretBean, c'est ca :
    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
     
    public class ArretBean {
     
        private Integer noArret;
        private String noAgent;
        private Date  dateDebut ;
        private Date  dateFin;
        private String  noMotif;
        ...
     
        public String getNoMotif() {
            return this.noMotif;
        }
     
        public String getLibelleMotifArret() {
            return (methodeMagique(noMotif));
        }
        ....
    J'ai tous les getters/setters norme javaBean, et en plus pour noArret, j'ai une méthode qui me renvoi en toutes lettres l'arret.

    Donc j'ai placé en session le vecteur qui contient tous les ArretBean que je veux afficher dans le tableau.
    Je vais donc faire un <logic:iterate... sur le vecteur que j'ai placé en session ok?
    Et generalement dans le <logic:iterate, on fait des <bean:write name="noMotif"/> pour afficher les différents attibuts de l'objet courant.

    Et il se sert de getNoMotif pour récupérer la valeur à afficher, donc comment lui dire de se servir de getLibelleMotifArret() ?

  10. #30
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Par défaut
    rho rho
    Il se sert de getNoMotif parce que tu as mis noMotif, donc si tu mets libelleMotifArret ça devrait aller. Je dis une bêtise?
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  11. #31
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Par défaut
    je sors !

    t'a tout à fait raison, ca devrait tourner comme ca ! je vais tester, merci beaucoup

  12. #32
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Par défaut
    c'est encore moi..

    il y a un truc que j'ai raté, j'ai ca dans l'Action :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Vector listeArretsInitiaux = new ArretDAO().getAllArretInitiauxAgent(id);
                request.getSession().setAttribute("listeArretsInitiaux",listeArretsInitiaux);
                return mapping.findForward("afficheListeArrets");
    Donc théoriquement quelque part en session j'ai un attribut nommé "listeArretsInitiaux" qui contient mon vecteur.

    mais après dans le <logic:iterate je crois que j'arrive pas à le récuperer, du fait que je ne l'ai pas mis dans un bean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <logic:iterate id="arret" property="listeArretsInitiaux">
        <bean:write name="dateDebut"/>
    </logic:iterate>
    ca ne passe pas, j'arrive pas à lui dire de le chercher dans la session...

  13. #33
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Par défaut
    il me semble que tu devrais utiliser le l'attribut "name" pour specifier la collection que tu veux iterer.

    Bon courage

  14. #34
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Par défaut
    Salut,

    Finalement, j'ai crée un bean exprès, qui s'appelle ListeArrets.java et qui a un seul attribut listeArretsAgent de type Vector. J'ai aussi donc les getters/setters norme javaBean sur ce vecteur.
    Donc je le rempli via une méthode DAO, je le place en request puis j'itère dessus comme ca :

    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
     
      <logic:iterate id="arret" name= "listeArrets" property="listeArretsAgent">
                       <logic:equal name="arret" property="typeArret" value="Initial">
                           <tr class="ligneArretInitial">
                       </logic:equal>
                       <logic:equal name="arret" property="typeArret" value="Prolongation">
                           <tr class="ligneArretProlongation">
                       </logic:equal>        
     
                           <td><bean:write name="arret" property="noArret"/></td>
                           <td><bean:write name="arret" property="typeArret"/></td>
                           <td><bean:write name="arret" property="libelleMotif"/></td>
                           <td><bean:write name="arret" property="dateDebut"/></td>
                           <td><bean:write name="arret" property="dateFin"/></td>
                           <td><bean:write name="arret" property="commentaire"/></td>
                           <td><bean:write name="arret" property="dateControle"/></td>
                           <td><bean:write name="arret" property="ajoutePar"/></td>
                           <td><bean:write name="arret" property="dateAjout"/></td>
     
                           <logic:equal name="arret" property="typeArret" value="Initial">                
                               <td><input type="radio" name="arretChoisi" value="<bean:write name="arret" property="noArret"/>" /></td>
                           </logic:equal>
                             <logic:equal name="arret" property="typeArret" value="Prolongation">                
                               <td>&nbsp</td>
                           </logic:equal>
                       </tr>                    
                   </logic:iterate>
    ca marche bien.

    merci quand même pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [EJB]débutant EJB. Quels plugins pour eclipse ?
    Par clement42 dans le forum Eclipse Java
    Réponses: 8
    Dernier message: 25/12/2005, 18h07
  2. [Débutant][Avis] Quel PDA pour J2ME ?
    Par vallica dans le forum Java ME
    Réponses: 5
    Dernier message: 07/10/2005, 08h17
  3. Réponses: 2
    Dernier message: 08/09/2005, 12h18
  4. Réponses: 2
    Dernier message: 03/06/2004, 08h32
  5. [Struts][Débutant]Pb de Bean
    Par Ho(c)ine. dans le forum Struts 1
    Réponses: 4
    Dernier message: 07/04/2004, 11h18

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