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] Probleme de recuperation de donnees


Sujet :

Struts 1 Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Points : 55
    Points
    55
    Par défaut [Struts] Probleme de recuperation de donnees
    Bonjour,

    j'ai un problème concernant Struts, avec un formulaire JSP qui doit populate un objet de la couche Modele encapsulé dans un beanForm.

    Mon code est le suivant :

    L'objet Client de la couche Modele
    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
     
     
    package struts.myPackage.model;
     
    public class Client
    {
     private String name;
     private int id;
     
     public int getId() {
      return id;
     }
     public void setId(int id) {
      this.id = id;
     }
     public String getName() {
      return name;
     }
     public void setName(String name) {
      this.name = name;
     }
     
    }

    Le Bean Form qui prend un objet Client de la couche modele (plutot que d'avoir des setters/getters pour name et id)
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    package struts.myPackage.form;
    import org.apache.struts.action.*;
    import struts.myPackage.model.Client;
    import javax.servlet.http.*;
     
    public class ClientForm extends ActionForm
    {
     private Client client = new Client();
     private String id;
     
     public void reset(ActionMapping mapping, HttpServletRequest request) { 
      System.out.println("[ConnexionBean.java] La methode reset a ete appelee");
     } 
     // pour la validation
     public ActionErrors validate(ActionMapping mapping, HttpServletRequest request){
      // gestion des erreurs
      ActionErrors erreurs = new ActionErrors(); 
      /* vide */
      return erreurs;
     }
     public Client getClient() {
      return client;
     }
     public void setClient(Client client) {
      this.client = client;
      this.client.setId(Integer.parseInt(this.id));
     }
     public String getId() {
      return id;
     }
     public void setId(String id) {
      this.id = id;
     }
     
    }
    Ma page JSP du formulaire contenant les champs name et id
    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
    28
    29
    30
    31
    32
    33
    34
    35
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-nested" prefix="nested"%>
    <html>
    <head>
    <title>Formulaire</title>
     
    </head>
    <body>
    <center>
    <h1>Cr&eacuteation d'un nouvel utilisateur : &eacutetape 1</h1>
    <hr>
    <html:form action="/send_client">
    <table>
    <tr>
    <td>Nom</td>
    <td><nested:text property="client.name" size="20" maxlength="10"/></td>
    </tr> 
    <tr>
    <td>Id</td>
    <td><nested:text property="id" size="20" maxlength="10"/></td>
    </tr>
    </table>
     
    <table>
    <tr>
    <td><input type="submit" value="Send"></input></td>
    <td><input type="reset" value="Reset"></input></td>
    </tr>
    </table> 
     
    </html:form>
    </center>
    </body>
    </html>
    "name" est un string, donc je set directement la propriété "name" de l'objet "Client" (couche modele) de la classe ClientForm

    "id" est un int, je dois adapter la saisie de l'id du string en int (car un formulaire prend des String), donc je set la propriété de l'objet ClientForm(et non la propriété id de son attribut Client, comme je l'ai fait avec "name")

    Bref "on" ma dit en gros que l'action form encapsule un objet modele, et qu'il faut adapter du String vers le type (Date, Int) pour chaque propriété de l'objet du modele...

    Ma classe action
    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
     
     
    package struts.myPackage.action;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import struts.myPackage.form.ClientForm;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import javax.servlet.ServletException;
     
    public class ClientAction extends Action{
     public ActionForward execute(ActionMapping mapping, ActionForm form,
             HttpServletRequest request, HttpServletResponse response)
       throws IOException, ServletException
     {
      ClientForm c= (ClientForm) form;
     
     
      System.out.println("DANS  MODEL > id du client :" +c.getClient().getId()+ " ,nom du client :" +c.getClient().getName());
      System.out.println("DANS  FORM > id du client :" +c.getId());
     
      return mapping.findForward("adresse");
     }
    }
    Du coup , quand je saisie "toto" et "20" le resultat de l'Action affiche :

    DANS MODEL > id du client :0 ,nom du client :Toto
    DANS FORM > id du client :20
    ça veut dire que je n'ai pas populé la propriété "id" (vu qu'elle vaut 0) de l'objet Client à l'intérieur de l'ActionForm. Par contre, j'ai bien Set la valeur de la propriété 'Id' de l'objet ActionForm.

    Le truc qui serait bien, ce serait de récupérer mon beanForm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ClientForm c= (ClientForm) form;

    celui ci encapsule un objet de la couche modele (l'attribut "client" donc) que je souhaite recupérer intacte avec les données que j'avais saisies :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Client c = c.getClient();
    pour utiliser appliquer les méthodes de mes classes métiers avec cette objet Client de la couche modele.

    Ceci étant la problématique, lol

    Ma question est alors :

    comment je fais pour populer la propriété "id" de l'objet Client de la couche modèle dès la validation du formulaire (donc au niveau de la JSP).

    Jusque là, j'ai comme solution le code suivant à ajouter en plus dans la méthode execute de la classe Action :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    c.getClient().setId(c.getId())  /* on fixe l'id dans l'objet Client */
     
    Client c = c.getClient();
     
    /* puis on travaille sur l'objet client avec les classes métiers ..etc */
    ok bon...c un peu moche tou ça no? Imaginez les propriétés qui ne sont pas des strings (Date, Int) faudra récupérer ça a chaque fois ...

    Quelle solution vous pourriez me proposer pour populer correctement cet objet Client encapsulé dans le beanForm ?

    Merci.

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Bonjour,

    je n'ai jamais eu de problèmes par rapport aux types classiques en utilisant les wrappers Integer, Float, etc... Par contre effectivement pour les dates c'est un peu plus délicat, mais il existe des choses sur le net et sur developpez par rapport au validator.

    Tu peux par exemple redéfinir ta propre classe Date et y encapsuler la classe classique.

    Eric

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/05/2008, 11h00
  2. Problème de récupération de données?
    Par bonsam dans le forum Dreamweaver
    Réponses: 6
    Dernier message: 17/10/2006, 14h42
  3. Réponses: 3
    Dernier message: 03/10/2006, 23h20
  4. [SGBD] probleme de recuperation de donnee d'une bdd Mysql
    Par chex dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 13/04/2006, 17h05
  5. Réponses: 12
    Dernier message: 03/11/2005, 12h26

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