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 2 Java Discussion :

Objet affiché différent de mon objet en session


Sujet :

Struts 2 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Par défaut Objet affiché différent de mon objet en session
    Bonjour,

    Voici le problème auquel je fais face et que je n'arrive pas à résoudre ni à comprendre d'ailleurs.

    Mon application en cours de développement permet de gérer une liste de villes pour un utilisateur (ajout et suppression de villes dans la liste).

    Chaque utilisateur peut bien sur se connecter à l'application pour éditer cette liste. Quand un utilisateur se connecte, il est donc classiquement mis en session. Maintenant, l'utilisateur se rend sur la page permettant d'éditer cette liste de villes et décide d'en ajouter une nouvelle. Un formulaire lui permet de faire ceci en choisissant une ville parmi une liste déroulante. Une fois validé, la ville est ajoutée et vous êtes redirigé sur votre liste de villes.

    Malheureusement tout ne fonctionne pas comme prévu: si je consulte la base de données et mon objet en session, la nouvelle ville apparaît bien mais dans ma page Web affichant les villes, celle-ci n'apparaît pas.

    Je ne vois pas ce qui provoque ce problème. Si mon objet en session contient la nouvelle ville, pourquoi ma jsp ne me l'affiche pas.

    Si quelqu'un peut me donner des pistes ou a déjà rencontré ce problème je suis preneur.


    Technologies utilisées et informations :
    - struts 2, spring et hibernate.
    - L'application Web communique uniquement avec des services et mes services font appel à des DAO.

  2. #2
    Membre éprouvé
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    Bonjour,

    En pratique tu devrais normalement refaire une requête de la liste des villes, car d'autres utilisateurs pourraient aussi rajouter des villes et donc elles ne seraient pas visibles dans la liste si tu ne le fait pas.

    Je ne comprend pas bien, tu as une liste et une écran d'édition/création qui permet de rajouter une nouvelle liste. Quand tu rajoutes une nouvelle ville tu la met dans la db et dans ta liste/array de villes en même temps ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Par défaut Plus de précisions
    Bonjour,

    Je crois que mon premier post n'était pas très compréhensible. je vais tenter de détailler plus précisément ce que je fais. De plus la situation a évoluée depuis hier.

    Voilà la page Web que j'ai créé. Je suis connecté avec un utilisateur quelconque. La liste de villes d'un utilisateur lui est personnelle, en aucun cas d'autres utilisateurs ne peuvent modifier sa liste.



    Sur l'écran, on voit en fait que l'utilisateur peut gérer deux listes différentes : une pour ses villes contribuées, une pour ses villes suivies. Cela a peu d'importance, cela fonctionne dans les deux cas de la même facon.

    Hier je disais que ma liste de villes contribuées (respectivement la liste de villes suivies) ne contenait pas la nouvelle ville contribuée ajoutée (respectivement la ville suivie) alors que je venais juste de l'ajouter grâce au formulaire.

    Dans mes logs, je pouvais constater que l'insertion de la ville pour cet utilisateur était bien faîte. Mais pour autant la collection de villes de mon utilisateur en session ne prenait pas en compte cet ajout.

    Voilà comment cela fonctionne, j'ai une classe CitiesAction qui a une méthode saveContributedCity. Cette méthode permet l'ajout d'une ville contribuée à l'utilisateur. Cette méthode appelle la méthode addContributedCity(Member member, City city) de mon service memberService. La méthode de mon service fait elle même appelle à la méthode DAO qui permet d'ajouter à l'utilisateur la ville dans sa collection et par la même occasion dans la base de donnés (Hibernate le gère automatiquement).

    Je me suis rendu compte que le problème venait de ma méthode dans mon DAO : j'utilisais un objet temporaire pour stocker l'objet membre persistant obtenu avec un session.load et l'id du membre en paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void addContributedCity(int memberId, int contributedCityId) {
        Session session = sessionFactory.getCurrentSession();
     
        Member member = (Member) session.load(Member.class, memberId);
        City contributedCity = (City) session.load(City.class, contributedCityId);
     
        member.addContributedCity(contributedCity);
      }
    Evidemment lorsque je faisais l'ajout de ma ville, je le faisais sur l'objet temporaire et mon objet en paramètre n'avait du coup pas la nouvelle ville dans sa collection, d'où le problème de mise à jour dans ma page Web.

    J'ai donc modifié ma méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void addContributedCity(Member member, City contributedCity) {
        Session session = sessionFactory.getCurrentSession();
     
        City contributedCity = (City) session.load(City.class, contributedCity.getId());
     
        member.addContributedCity(contributedCity);
     
        session.update(member);
      }
    Cela fonctionne comme ca mais j'ai quelques doutes sur la manière dont j'ai implémenté ca. J'utilise session.update, est-ce vraiment adapté ? Est-ce une manière habituelle de gérer l'ajout dans une collection ?

    C'est la première fois que j'utilise Hibernate dans un projet et cette notion de sessions d'Hibernate et d'états d'objets me paraissent parfois compliqués à mettre en oeuvre malgré tout ce que j'ai pu lire concernant ce sujet.

Discussions similaires

  1. [PowerShell] Afficher plusieurs objets personnalisés différents dans un script ?
    Par arnaudperfect dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 22/06/2015, 18h06
  2. Réponses: 11
    Dernier message: 08/01/2006, 22h06
  3. Réponses: 4
    Dernier message: 15/11/2005, 10h49
  4. [C#]Quand mon objet axWebBrowser est-il supprimé ?
    Par Kcirtap dans le forum Windows Forms
    Réponses: 5
    Dernier message: 18/10/2005, 10h16
  5. [jcombobox]l'élément affiché lié à un autre objet
    Par szdavid dans le forum Composants
    Réponses: 3
    Dernier message: 11/05/2004, 10h17

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