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 :

Probleme de scope sur une collection


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 94
    Par défaut Probleme de scope sur une collection
    Bonjour,

    D'abord je m'excuse pour le doublon de message, je viens devoir qu'il y avait un forum spécifique à struts.

    Voila mon problème:

    Dans ma page JSP, j'ai qqch qui ressemble à ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <c:forEach var="i" items="${monForm.monVector}">
              <tr> 
                <td>
                  Mon test
                <td>
              </tr>
    </c:forEach>
    Bien sur sa ne marche pas, la page ne se remplit pas.
    Si je change le nom de ma collection (pour rigoler), pas de prob, la page s'affiche...mais sans les données bien sur.

    Donc avec mon EDI, en mode debug, je vérifie que monVector est bien présent dans la session, et il y est bien, même pas vide en plus !

    Dans mon action (struts) la variable est mise dans la session de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    m_session.setAttribute( "monForm", instanceDeMonForm );
    Il semble donc qu'il s'agisse d'un problème de scope(portée), enfin c'est ce que m'as dit mon boss en me conseillant de passer cette variable par "response". Comme ca on est sur d'avoir la variable dans le scope "page".

    Mon problème est donc:

    Vous pensez que c'est la bonne solution?

    Et si oui comment on fait pour mettre une variabledans "response"? J'ai beau chhercher, j'ai pas trouvé.


    Merci de votre aide.

  2. #2
    Expert confirmé

    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
    Par défaut
    Tout d'abord, dans ta jsp, as-tu codé la directive taglib qui pointe sur la librairie core de la JSTL ?

    Ensuite, normalement, pour mettre ton Vector dans le scope via le form-bean, il faut procéder comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TonActionForm instanceDeTonForm = (TonActionForm) form ;
    instanceDeTonForm.setTonVector(tonVector) ;
    le scope (request ou session) étant défini dans le mapping de cette Action.

    Sinon, que contient ton Vector ? Si c'est un Vector de String, pour afficher son contenu, il faut coder ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <c:forEach items="${monForm.monVector}" var="item">
       <c:out value="${item}"/>
    </c:forEach>

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 94
    Par défaut
    Bonjour,

    Oui, j'ai bien la directive tag lib correspondante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>

    instanceDeTonForm.setTonVector(tonVector) ;
    En fait mon vector est une propriété de mon form, donc je n'ai pas de set a faire me semble il?

    Ensuite, normalement, pour mettre ton Vector dans le scope via le form-bean, il faut procéder comme ceci :
    En fait ce n'est pas le vector que je souhaite mette dans le scope mais le form lui meme. Pour ce faire je procede comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_session.setAttribute( monForm.ID, instanceDeMonForm);
    ...En fait je pense que mon Form est bien dans le scope car si dans ma jsp je fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:out value="1:${FormLstPrsBean}"/>
    A l'affichage j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lu.alti.igss.ceo.web.beans.Form_LstPrsBean@15b15ab
    Form_LstPrsBean étant le nom de mon form. Donc il est bien présent en mémoire.

    Mon form possède des vecteurs dont(pour un test) celui ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     public String myTab[] = {"lundi", "mardi", "mercredi", "jeudi", "vendredi"};
    ...et en vrai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Vector vLstPersData;
    Pour résumer si je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:out value="1:${FormLstPrsBean}"/>
    , sa marche.

    Et si je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:out value="1:${FormLstPrsBean.myTab}"/>
    Ou alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:out value="1:${FormLstPrsBean.vLstPersData}"/>
    , il est plus content du tout et ma page ne s'affiche plus complétement.

    Seb pas comprendre

  4. #4
    Expert confirmé

    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
    Par défaut
    As-tu essayé avec le code que je t'ai donné précédemment, soit comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <c:forEach items="${FormLstPrsBean.vLstPersData}" var="item">
       <c:out value="${item}"/>
    </c:forEach>
    Et peux-tu montrer comment tu initialises le vecteur vLstPersData ?

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 94
    Par défaut
    oui, j'ai essayé de cette manière mais sa marche pas, ma page ne se construit pas dynamiquement en fait voici l'erreur que donne mon debuggeur

    Messages : An error occurred while evaluating custom action attribute "value" with value "${FormLstPrsBean.vLstPersData}": Unable to find a value for "vLstPersData" in object of class "lu.alti.igss.ceo.web.beans.Form_LstPrsBean" using operator "." (null)
    Pour l'initialisation je fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public Vector myTab2 = new Vector();
    Et dans le constructeur du form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        myTab2.addElement("lundi");
        myTab2.addElement("mardi");
        myTab2.addElement("mercredi");

  6. #6
    Expert confirmé

    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
    Par défaut
    Je ne comprends pas bien.
    Dans le message d'erreur, le vecteur s'appelle vLstPersData et dans le code de l'ActionForm que tu as posté, le vecteur s'appelle myTab2.
    Donc, tu devrais coder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <c:forEach items="${FormLstPrsBean.myTab2}" var="item">
       <c:out value="${item}"/>
    </c:forEach>
    Sinon, dans le message d'erreur, il dit que tu utilises l'opérateur "." dans l'attribut value.
    Dans mon exemple, ce n'est pas le cas.
    Il semblerait que tu aies codé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       <c:out value="${FormLstPrsBean.vLstPersData}"/>
    Peux-tu nous montrer le code du c:forEach correspondant au message d'erreur ?

    Et enfin, d'après ton exemple, myTab2 est un vecteur de String.
    Et vLstPersData, c'est un vecteur de String également ou un vecteur de bean ?

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

Discussions similaires

  1. [MySQL 4.1] probleme d'accents sur une requete SQL
    Par tatayoyo dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/11/2005, 16h06
  2. [Struts] <logic:iterate> sur une collection d objets c
    Par trax020 dans le forum Struts 1
    Réponses: 2
    Dernier message: 12/05/2005, 00h11
  3. probleme de texture sur une sphère
    Par sebpp dans le forum OpenGL
    Réponses: 2
    Dernier message: 12/04/2005, 19h46
  4. Mount / fstab - Problème de droit sur une partition
    Par Chance666 dans le forum Administration système
    Réponses: 5
    Dernier message: 17/01/2005, 15h57
  5. Probleme de pointeur sur une fonction
    Par nicky78 dans le forum C
    Réponses: 2
    Dernier message: 23/05/2004, 20h26

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