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 :

[struts][jsp] récupérer objet session dans ActionForm


Sujet :

Struts 1 Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    283
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 283
    Points : 114
    Points
    114
    Par défaut [struts][jsp] récupérer objet session dans ActionForm
    Hello,

    j'aimerais récupérer un objet de ma session dans une classe ActionForm. En fait c'est la première fois que j'essaye de récupérer un objet de ma session donc je ne sais pas si je m'y prend bien.

    Mon objet a été créé de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <jsp:useBean id="test" class="util.Table" scope="session"/>
    et dans ma classe action form j'ai mis le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    HttpSession session = request.getSession(true);
    Table tb = session.getAttribute("test");
    Mais HttpSession est une interface. Y à t'il une classe qui l'implémente ? est ce que je m'y prend bien pour récupérer l'objet test ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    Apres une lecture rapide je dirais que ca devrais marcher !!
    Effectivement HttpSession est une interface mais chaque conteneurs de servlet doit implementer cette classe , du coup quand tu faisun getSession dans un tomcat par exemple tu te retrouve avec une implementation de HttpSession fournit par tomcat. (en tout cas c'est la reponse que je me suis donner lorsque comme toi je me suis posé la question) .
    Par contre si tu utilise STRUTS tu ne devrais pas avoir besoins de recuperer des objets ailleurs que dans ton Bean ActionForm , dans ton action tu remplit ton ActionForm avec toutes les données dont tu as besoins pour la presentation dans la mesure ou ton actionForm est declaré dans le strutsCOnfig Struts se chargeras d'aller chercher les infos dans la session lui meme .
    UML avec VIOLET

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    283
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 283
    Points : 114
    Points
    114
    Par défaut
    tu as raison, j'avais oublié de faire un import,... désolé pour le spam,....

    j'en profite pour poser une dernière question, une fois que j'ai récupéré l'objet et que je l'ai modifié, est ce que les modifications sont reportées dans l'objet session automatiquement ou est ce que je dois faire quelque chose de spécial ?


    Est ce que je dois faire le code suivant ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    session.putValue("id de l'objet dans la session", objetmodifié);

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    283
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 283
    Points : 114
    Points
    114
    Par défaut
    tient, ça compile mais j'ai une erreur bizarre quand j'exécute. Dès que j'essaye de modifier une propriété de mon objet récupérer ma page ne s'affiche plus. J'obtient une null pointer exception mais quand j'affiche le contenu de la variable qui référence mon objet j'obtient :
    "xxxx.TC2.MQSI.logging.util.Table@4c3d0e37". Je dois faire quelque chose en plus pour que ça marche ?

  5. #5
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Non les modifications ne sont pas reporté dans la session,
    Il te faut remettre ton objet dans la session comme suit :
    session.setAttribute("monObjet",monObjet);
    Etre c'est etre relatif.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    283
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 283
    Points : 114
    Points
    114
    Par défaut
    j'ai rajouté le set attribute derrière, mais j'ai le même problème. Quand je modifie mon objet j'ai une nul pointer exception. Voici le code complèt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HttpSession session = request.getSession(true);		
    Table T = (Table) session.getAttribute("test");
    T.setLines("30");
    session.setAttribute("test",T);
    et dans ma classe jsp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <jsp:useBean id="test" class="com.fortis.be.TC2.MQSI.logging.util.Table" scope="session"/>
    en fait, je ne fait à aucun autre endroit du code pour gèrer la session, je pense que le fait de mettre scope ="session" dans le tag jsp devrait me créér une session. Je me trompe ?

    on dirait que l'objet que me retourne ma sessino est vide, pourtant quand j'affiche la référence j'obtient quelque chose du style : "nom de la classe@serie de lettres", donc ce n'est pas null.

  7. #7
    Membre régulier Avatar de delas
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 100
    Points : 95
    Points
    95
    Par défaut
    dans ton actionform tu as déclaré ton objet avec le type
    util.Table
    ou
    com.fortis.be.TC2.MQSI.logging.util.Table
    ?
    peut etre que le probleme viens de la?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    283
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 283
    Points : 114
    Points
    114
    Par défaut
    je l'ai déclaré avec le type com.fortis... donc le bon type

  9. #9
    Membre régulier Avatar de delas
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 100
    Points : 95
    Points
    95
    Par défaut
    et si tu fais
    <%
    com.fortis.be.TC2.MQSI.logging.util.Table T = (com.fortis.be.TC2.MQSI.logging.util.Table ) request.getSession().getAttribute("test");
    %>

    ca marche?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    283
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 283
    Points : 114
    Points
    114
    Par défaut
    j'ai essayé mais malheureusement ça ne marche toujours pas

  11. #11
    Membre régulier Avatar de delas
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 100
    Points : 95
    Points
    95
    Par défaut
    et String s = "rr";
    request.getSession().setAttribute("s",s);
    String s2 = (String) request.getAttribute("s");
    System.out.println(s2);


    ca marche?

    si oui ya un soucis de session, sinon c que tu perds la session entre l'action et la jsp

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    Citation Envoyé par mlequim
    j'ai rajouté le set attribute derrière, mais j'ai le même problème. Quand je modifie mon objet j'ai une nul pointer exception. Voici le code complèt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HttpSession session = request.getSession(true);		
    Table T = (Table) session.getAttribute("test");
    T.setLines("30");
    session.setAttribute("test",T);
    et dans ma classe jsp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <jsp:useBean id="test" class="com.fortis.be.TC2.MQSI.logging.util.Table" scope="session"/>
    en fait, je ne fait à aucun autre endroit du code pour gèrer la session, je pense que le fait de mettre scope ="session" dans le tag jsp devrait me créér une session. Je me trompe ?

    on dirait que l'objet que me retourne ma sessino est vide, pourtant quand j'affiche la référence j'obtient quelque chose du style : "nom de la classe@serie de lettres", donc ce n'est pas null.
    J'ai peut etre pas tout compris mais lors de ton premier passage T n'est pas initialiser dans la session donc T est null du coup lorsque tu fais :
    tu as une NullPointerException donc tu devrais faire un test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (T==null){
      T= new Table() 
    }
    ...
    UML avec VIOLET

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    283
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 283
    Points : 114
    Points
    114
    Par défaut
    Ca ne marche pas, il m'affiche null. Quand j'utilise un tag<jsp:usebean scope=session"> il sauve l'objet dans la session donc la session devrait être créé pourtant , bizarre. Il est possible que je me goure complètement, vu que je n'ai jamais créé de session dans un site internet, ce sont mes premiers essais.

  14. #14
    Membre régulier Avatar de delas
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 100
    Points : 95
    Points
    95
    Par défaut
    je me suis trompé, c'est

    String s = "rr";
    request.getSession().setAttribute("s",s);
    String s2 = (String) request.getSession().getAttribute("s");
    System.out.println(s2);


    qu'il fallait lire....

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    283
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 283
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par FreshVic
    Citation Envoyé par mlequim
    j'ai rajouté le set attribute derrière, mais j'ai le même problème. Quand je modifie mon objet j'ai une nul pointer exception. Voici le code complèt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HttpSession session = request.getSession(true);		
    Table T = (Table) session.getAttribute("test");
    T.setLines("30");
    session.setAttribute("test",T);
    et dans ma classe jsp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <jsp:useBean id="test" class="com.fortis.be.TC2.MQSI.logging.util.Table" scope="session"/>
    en fait, je ne fait à aucun autre endroit du code pour gèrer la session, je pense que le fait de mettre scope ="session" dans le tag jsp devrait me créér une session. Je me trompe ?

    on dirait que l'objet que me retourne ma sessino est vide, pourtant quand j'affiche la référence j'obtient quelque chose du style : "nom de la classe@serie de lettres", donc ce n'est pas null.
    J'ai peut etre pas tout compris mais lors de ton premier passage T n'est pas initialiser dans la session donc T est null du coup lorsque tu fais :
    tu as une NullPointerException donc tu devrais faire un test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (T==null){
      T= new Table() 
    }
    ...
    en fait j'ai oublié de dire que mon message précédent était adressé à delas.

    freshvic, je pense qu'il faudra aussi que rajoute ton code, mais vu le test que delas à proposé on dirait que c'est tout le mécanisme de session qui ne marche pas. Je suppose que je devrai rajouter tes lignes quand je pourrai faire un set, getattribute comme dans l'exemple de delas.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    Je pense pas que se soit la session qui soit Null , je pense que c'est T !
    Initialises tu a un moment ou à un autre T , fais tu un T= new Table() ; quelque part ??
    UML avec VIOLET

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    283
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 283
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par delas
    je me suis trompé, c'est

    String s = "rr";
    request.getSession().setAttribute("s",s);
    String s2 = (String) request.getSession().getAttribute("s");
    System.out.println(s2);


    qu'il fallait lire....
    lol, vous postez tellement vite tout les deux que mes réponses croisent les votres . ce test marche et rr est bien affiché . Je vais maintenant essayer ce que propose freshvic.

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    283
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 283
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par FreshVic
    Je pense pas que se soit la session qui soit Null , je pense que c'est T !
    Initialises tu a un moment ou à un autre T , fais tu un T= new Table() ; quelque part ??
    en fait je n'itialise pas T, mais le tag jsp:usebean crée l'objet dans la session s'il n'existe pas. Donc c'est ce tag qui fait le new.

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    Citation Envoyé par mlequim
    Citation Envoyé par FreshVic
    Je pense pas que se soit la session qui soit Null , je pense que c'est T !
    Initialises tu a un moment ou à un autre T , fais tu un T= new Table() ; quelque part ??
    en fait je n'itialise pas T, mais le tag jsp:usebean crée l'objet dans la session s'il n'existe pas. Donc c'est ce tag qui fait le new.
    mmmm je suis sceptique. mais je pourrais pas certifié qu'il ne le fait pas , mais pour moi le useBean ce contente de faire un session.getAttribute et le cast qu'il faut !!
    UML avec VIOLET

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    283
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 283
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par FreshVic
    Citation Envoyé par mlequim
    Citation Envoyé par FreshVic
    Je pense pas que se soit la session qui soit Null , je pense que c'est T !
    Initialises tu a un moment ou à un autre T , fais tu un T= new Table() ; quelque part ??
    en fait je n'itialise pas T, mais le tag jsp:usebean crée l'objet dans la session s'il n'existe pas. Donc c'est ce tag qui fait le new.
    mmmm je suis sceptique. mais je pourrais pas certifié qu'il ne le fait pas , mais pour moi le useBean ce contente de faire un session.getAttribute et le cast qu'il faut !!
    je ne crois pas car dans plusieurs endroit de mon code j'ai utilisé des jsp:usebean, puis dans des scriplets j'ai directement utilisé les méthodes, champs du bean sans créér explicitement le bean avec un new et cela marchait.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Récupérer objets proprement dans la JSP
    Par lalilulelo dans le forum Struts 1
    Réponses: 5
    Dernier message: 21/12/2007, 11h13
  2. Récupérer objet session dans une Applet
    Par LTN dans le forum Applets
    Réponses: 4
    Dernier message: 24/10/2006, 14h07
  3. [POO] Récupérer objet java dans script javascript
    Par Mister Nono dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/10/2006, 16h42
  4. [Struts][JSP]gestion des session en JSP
    Par zola dans le forum Struts 1
    Réponses: 6
    Dernier message: 27/04/2006, 16h23
  5. Réponses: 6
    Dernier message: 30/04/2004, 15h53

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