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 :

Envoyer et recevoir d'un Form


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 22
    Par défaut Envoyer et recevoir d'un Form
    Bonjour,

    j'ai un probleme sur la récupération de données avec Struts, je m'explique.

    Je fais une requete en BDD avec un JdcbWrapper, donc le nombre de ligne en retour est variable.
    Ensuite j'affiche dans ma jsp cette fameuse ArrayList dans laquelle je peut modifier un champ de chaque ligne.

    Mon probleme est que cele n'effectue aucun changement dans mon bean Formulaire...

    Comment faire ??

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    Question très classique, je commence à me demander si l'écriture d'un tutoriel ou au moins d'une FAQ ne serait pas judicieuse...

    Bon, je ne rentre pas (encore) dans les détails, mais voici quelques pistes :

    - Mettre ton form en scope session (pas obligatoire, mais plus pratique, surtout quand on débute) => à faire dans ton action dans ton struts-config.xml
    - Utiliser la balise "logic:iterate" pour faire une boucle sur les éléments de ta liste
    - Ajouter à tous tes champs html struts (ceux qui sont dans ta liste) l'attribut 'indexed="true"' => cela changera le "name" de tes "vrais" champs HTML en "machin[i].tonChamp" au lieu de "tonChamp", ce qui permettra à Struts de différencier les mêmes champs d'enregistrements différents.
    - Ajouter à ton ActionForm une méthode du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public LeTypeDeTonItem getTaListe(int index) {
      return taListe.get(index);
    }
    avec :
    * taListe : l'id de l'item tel que tu le définis dans ta JSP. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <logic:iterate id="taListe" ...>
      <html:text property="tonProperty" name="taListe" indexed="true"/>
    </logic:iterate>
    * LeTypeDeTonItem : la classe des objets contenus dans ta liste

    En faisant tout cela comme il faut, Struts appelera cette dernière méthode quand il rencontrera un champ indexé, et l'utilisera pour renseigner les nouvelles valeurs des diverses propriétés de tes items.

    Essaie de faire le maximum de tout ça, et dis nous ce qui te pose problème.

  3. #3
    Membre averti
    Inscrit en
    Août 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 22
    Par défaut Je pense l'avoir fait
    Je pense avoir respecté ce type de structure....

    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
     
    <logic:iterate  
    						        length='<%=nbligne%>' 
    						        indexId="index" 
    						        id="bean1"
    								offset='<%= request.getParameter("offset") %>'
    								name="monForm"
    								property="bean2"
    								type="Recherche">
     
    								<html:hidden name="trace" property="valeur" styleId="valeur" indexed="true"/>
    								<html:hidden name="trace" property="newValeur" styleId="newValeur" indexed="true"/>
     
     
    									<TD><bean:write name="trace"  property="id"/></TD>
    									<TD><bean:write name="trace"  property="libelle" /></TD>
    									<TD width="10%" align="center"><html:text size="20" indexed="true" name="trace" property="valeur" styleId="valeur"  /></TD>
    									<TD width="10%" align="center"><html:text name="trace" property="newValeur" styleId="newValeur" indexed="true" /></TD>
    									<%--<TD width="10%" align="center"><html:text name="aForm" property="newVal" styleId="newVal"   /></TD> --%>
    									<TD width="40%" align="center"><bean:write name="trace"  property="commentaire" /></TD>
     
     
    						</logic:iterate>
    bean1 est mon Form, qui contient bean2 qui lui est la ArrayList. La premiere fois que je rentre dans la JSP, une action a deja ete faite, une requete et donc les champ de mon bean1 ont bien ete mis a jour.
    Mais lorsque je change quelque chose dans la jsp, il ne se passe rien les changement n'est pas pris en compte....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class monForm  extends ActionForm {
     
    	private String bouton = null;
    	private ArrayList<Recherche> bean2;
    	private ArrayList<String> newVal;
     
            ...
     
            public Recherche getbean2(int index) {
    		return bean2.get(index);
    	}
    Voila je pense avoir respceté mais ca na marche pas...???
    Pouvez vous encore m'aider svp ????

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    C'est quoi "trace" ? Logiquement, vu ton code, c'est "bean1" que tu devrais mettre dans tes attributs "name", non ?

    Ton getter "indexé" doit porter sur le name que tu définis pour tes champs. Si tu définis "bean1" comme name de tes champs indexés, tu dois avoir une méthode getBean1(int index) (avec une majuscule !). Idem, si c'est "trace" ton name, tu dois avoir une méthode getTrace(int index).

  5. #5
    Membre averti
    Inscrit en
    Août 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 22
    Par défaut
    je remet avec tout homogeneisé ^^

    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
     
    <logic:iterate
    length='<%=nbligne%>' 
    indexId="index" 
    id="bean1"
    offset='<%= request.getParameter("offset") %>'
    name="monForm"
    property="bean2"
    type="Recherche">
     
    <html:hidden name="bean1" property="valeur" styleId="valeur" indexed="true"/>
    <html:hidden name="bean1" property="newValeur" styleId="newValeur" indexed="true"/>
     
     
    <TD><bean:write name="bean1"  property="id"/></TD>
    <TD><bean:write name="bean1"  property="libelle" /></TD>
    <TD width="10%" align="center"><html:text size="20" indexed="true" name="bean1" property="valeur" styleId="valeur"  /></TD>
    <TD width="10%" align="center"><html:text name="bean1" property="newValeur" styleId="newValeur" indexed="true" /></TD>
     
    <TD width="40%" align="center"><bean:write name="bean1"  property="commentaire" /></TD>
     
     
    </logic:iterate>
    Je lui dis bien qu'il travaille dans mon bean2 qui est de type monForm, sur l'attribut bean1 qui est a l'interieur de bean2

    Et je me suis trompé pour la methode get je corrige

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class monForm  extends ActionForm {
     
    	private String bouton = null;
    	private ArrayList<Recherche> bean1;
    	private ArrayList<String> newVal;
     
            ...
     
            public Recherche getBean1(int index) {
    		return bean1.get(index);
    	}
    Est ce bon ?
    desolé de vous embetez avec ca mais je debute en Struts...

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    A première vue, ca m'a l'air OK. Ca marche alors ?

    Remarques :
    - Il faut une majuscule à ta classe "monForm" (mais ca, j'imagine que c'est juste une faute de frappe)
    - Tu devrais prendre l'habitude de définir tes variables avec des types "génériques", donc, utilise plutot List que ArrayList dans tes définitions, l'ArrayList te permettra d'instancier ta variable (List<Recherche> truc = new ArrayList<Recherche>() ). Ca n'a pas d'impact direct, mais c'est une bonne habitude, qui finit par servir (car tu peux vouloir, dans certains cas, implémenter autrement ta liste).
    - Personnellement j'initialise toujours mes collections dans mes ActionForm ( List<Recherche> truc = new ArrayList<Recherche>() , encore), histoire d'être sur de ne jamais me retrouver avec une valeur nulle. Je ne sais pas si c'est à faire, mais en tout cas ca simplifie souvent la vie.
    - Je n'ai à titre personnel jamais eu besoin de préciser le type dans un iterate (ni où que ce soit d'autre dans des balises struts d'ailleurs) : 'type="Recherche"'. Quelqu'un connait-il les cas où cet attribut est nécessaire ?

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    Citation Envoyé par mat453
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class monForm  extends ActionForm {
     
    	private String bouton = null;
    	private ArrayList<Recherche> bean1;
    	private ArrayList<String> newVal;
     
            ...
     
            public Recherche getBean1(int index) {
    		return bean1.get(index);
    	}
    Après relecture, non, ca ne va pas.

    D'après ce que tu as expliqué, bean1 désigne un item de ta liste, qui est bean2 (faudra changer les noms, ca prete vraiment à confusion).
    Or, dans ton form bean, tu déclares bean1 comme une liste, tu as dû confondre avec bean2 (d'où mon "faudra changer les noms" ). bean1, lui n'a pas à être déclaré comme attribut de ton form bean, seul le getter getBean1(int) est nécessaire -> n'oublie pas de changer tes accesseurs en conséquence.
    Et, du coup, dans ta méthode getBean1(int index), tu dois mettre 'return bean2.get(index)'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class MonForm  extends ActionForm {
     
    	private String bouton = null;
    	private List<Recherche> bean2;
    	private List<String> newVal;
     
            ...
     
            public Recherche getBean1(int index) {
    		return bean2.get(index);
    	}

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

Discussions similaires

  1. [Débutant] Envoyer et recevoir un Array par WinSocks
    Par luchoadvance dans le forum Delphi
    Réponses: 1
    Dernier message: 04/03/2007, 16h17
  2. Envoyer un parametre a une form
    Par LeXo dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 18/12/2006, 07h41
  3. Envoyer et recevoir des fichiers aves les Sockets
    Par kaderscream dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/08/2006, 17h51
  4. [Tableaux] Envoyer un Array par un form method get
    Par Zen_Fou dans le forum Langage
    Réponses: 4
    Dernier message: 22/03/2006, 19h51
  5. Réponses: 4
    Dernier message: 07/10/2005, 21h54

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