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

Spring Web Java Discussion :

Mapping entre un formulaire et un objet en session [MVC]


Sujet :

Spring Web Java

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 503
    Par défaut Mapping entre un formulaire et un objet en session
    Bonjour,

    J'ai un formulaire basique :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form:form action="account" method="post" class="form-horizontal" modelAttribute="sessionBean.person">
    <!-- some form input elements like -->
    <label class="col-sm-3 control-label">E-mail</label><div class="col-md-4"><form:input cssClass="form-control" path="email" maxlength="64" /></div>
    <!-- submit button -->
    </form:form>
    Dont le controlleur est le suivant :
    Code java : 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
    @Controller
    @SessionAttributes("sessionBean")
    public class AccountController {
        @Autowired
        private SessionBean sessionBean;
     
        /** Display account page and process updates: password, personnal information, company, delivery and billing addresses
         * @return JSP name
         */
        @RequestMapping("/account")
        public String accountPage(/* request params */) {
            //checks not displayed
            Person p=sessionBean.getPerson();
            s.createQuery("UPDATE Person SET tittle=:t, firstname=:fn, lastname=:ln, phone=:p, fax=:f, email=:e  WHERE id=:id")
                .setParameter("t", p.getTitle())
                .setParameter("fn", p.getFirstname())
                .setParameter("ln", p.getLastname())
                .setParameter("p", p.getPhone())
                .setParameter("f", p.getFax())
                .setParameter("e", p.getEmail())
                .setParameter("id", p.getId())
                .executeUpdate();
        }
    }
    Les classes SessionBean et personnes sont définies ci-dessous :
    Code java : 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
    38
    39
    40
    @Component
    @Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
    public class SessionBean implements Serializable {
        private static final long serialVersionUID = 9139554982970790165L;
        private final String id = UUID.randomUUID().toString();
        private Person person = null;
        private String redirect=null;
        private Order3d order3d=new Order3d();
        //getter and setters
    }
     
    @Entity
    @Table (name="person")
    public class Person implements Serializable {
        private static final long serialVersionUID = 3005461811554821039L;
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        @Column (name="id")
        private int id;
        @Column (name="email")
        private String email;
        @Column (name="company")
        private String company;
        @Column (name="siret")
        private long siret;
        @Column (name="payment")
        private String payment;
        @Column (name="title")
        private String title;
        @Column (name="firstname")
        private String firstname;
        @Column (name="lastname")
        private String lastname;
        @Column (name="password", columnDefinition="char", length=64)
        private String password;
        @Column (name="phone")
        private String phone;
        @Column (name="fax")
        private String fax;
    }

    Dans mon formulaire je récupère sans problème les données à afficher stockées dans Person, mais, quand je veux exécuter mon UPDATE, les données soumises ne sont pas prises en compte.

  2. #2
    Membre chevronné Avatar de ruscov
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 347
    Par défaut
    Quand tu vas en debug, il t'affiche quelque chose à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Person p=sessionBean.getPerson();
    ?

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 503
    Par défaut
    Oui mais j'ai les valeurs avant modification

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Pour tes paramètres enlève les deux points :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .setParameter("t", p.getTitle())
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .setParameter(":t", p.getTitle())

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 503
    Par défaut
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    			Person p=sessionBean.getPerson();
    			s.createQuery("UPDATE Person SET title=:t, firstname=:fn, lastname=:ln, phone=:p, fax=:f, email=:e  WHERE id=:id")
    				.setParameter("t", p.getTitle())
    				.setParameter("fn", p.getFirstname())
    				.setParameter("ln", p.getLastname())
    				.setParameter("p", p.getPhone())
    				.setParameter("f", p.getFax())
    				.setParameter("e", p.getEmail())
    				.setParameter("id", p.getId())
    				.executeUpdate();
    J'ai toujours le même problème, je ne récupère pas les données modifiées.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Et tu n'as aucun message d'erreur ?

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 503
    Par défaut
    Non, je produits ce résultat
    Hibernate: update person set title=?, firstname=?, lastname=?, phone=?, fax=?, email=? where id=?
    13:47:29,671 TRACE BasicBinder:84 - binding parameter [1] as [VARCHAR] - M
    13:47:29,672 TRACE BasicBinder:84 - binding parameter [2] as [VARCHAR] - Seb
    13:47:29,673 TRACE BasicBinder:84 - binding parameter [3] as [VARCHAR] - Seb
    13:47:29,673 TRACE BasicBinder:84 - binding parameter [4] as [VARCHAR] - 0612345678
    13:47:29,674 TRACE BasicBinder:84 - binding parameter [5] as [VARCHAR] -
    13:47:29,675 TRACE BasicBinder:84 - binding parameter [6] as [VARCHAR] - something@yopmail.com
    13:47:29,677 TRACE BasicBinder:84 - binding parameter [7] as [INTEGER] - 1
    Alors que j'ai changé le numéro de téléphone par 0687654321

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Les données que tu veux mettre à jour sont bien issues de ton objet Personne p ?

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 503
    Par défaut
    Oui, le code concerné du contrôleur est dans mon premier message

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Sauf qu'on ne sait pas ce contient réellement ton objet personne.
    Ca donne quoi au debugger comme te l'a suggéré ruscov ?

  11. #11
    Membre chevronné Avatar de ruscov
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 347
    Par défaut
    Ca vient de faire tilt. C'est normal que tu n'ais pas les nouvelles valeurs, dans ton Controller, je vois que ta méthode reçoit des params. Il faut que tu set le param que tu reçois dans ton sessionBean. C'est pas automatique dans la manière que tu as développé ton Controller et ton Bean.

  12. #12
    Membre éprouvé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 503
    Par défaut
    Merci ruscov, ça marche en faisant ça :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @RequestMapping("/account")
        public String accountPage(/* request params */
            @ModelAttribute("sessionBean") SessionBean sb) {
        //...
        return "account";
    }

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

Discussions similaires

  1. relations entre les formulaires
    Par PAUL87 dans le forum Access
    Réponses: 5
    Dernier message: 17/09/2005, 11h48
  2. liens entre sous formulaires
    Par delpiero10 dans le forum Access
    Réponses: 1
    Dernier message: 07/09/2005, 23h09
  3. Formulaire - lien JS - objet Null ou pas objet...
    Par Romalafrite dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/10/2004, 14h08
  4. [C#] Transférer des informations entre 2 formulaires
    Par monoeilouais dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/07/2004, 17h21
  5. touche entrée dans formulaire
    Par pram dans le forum XMLRAD
    Réponses: 8
    Dernier message: 15/04/2003, 09h13

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