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 :

<logic:iterate> et tableau a double entrée


Sujet :

Struts 1 Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut <logic:iterate> et tableau a double entrée
    Bonjour,

    J'ai un petit problème avec un tableau à double entrée et le <logic:Iterate>

    J'ai un form-bean struts déclarer comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    		<form-bean
    			name="totoBean"
    			type="truc.forms.PrlForm">
    			<form-property
    				name="id"
    				type="java.lang.String" />
    			<form-property
    				name="suggestions" 
    				type="java.lang.String[][]"/>
    		</form-bean>
    "suggestions" contient en fait 2 champs un ID et du texte

    Dans le form JAVA, j'ai bien les getter/setter indexés

    Dans la page JSP je voudrait qu'apparaissent uniquement les éléments "suggestions" texte et pas les ID.

    J'ai essayer différente chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    		<logic:iterate id="suggestion" property="suggestions" indexId="idx" name="totoBean">
    		<tr>
    			<td><bean:message key="prelevement.suggestions" /></td>
    			<td><bean:write name="idx"/></td>
    			<td><html:text property="suggestion[${idx}]"/></td>
    			<td><html:text property='<%="suggestion["+idx+"][0]"%>'/></td>
    			<td><html:text property='<%="suggestion["+idx+"][1]"%>'/></td>
    		</tr>
    		</logic:iterate>
    Mais à chaque fois je n'ai que l'adresse mémoire qui apparait.

    Pouvez-vous m'aider ?

    Merci d'avance

  2. #2
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    En Struts, il est beaucoup plus simple de travailler avec une collection d'objets ayant pour propriétés id et texte plutôt qu'avec un String[][].

    Sinon, je ne vois pas bien l'intérêt de définir les propriétés du form-bean dans le struts-config.xml si tu crées une classe Java avec getters et setters.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut
    En fait le bean est plus compliquer que cela, je l'ai simplifier pour l'exemple.
    Les données proviennent d'une base de données. Il y a un enregistrement pour le toto bean qui provient d'une table et il peut y avoir x enregistrements suggestions qui viennent d'une autre table.

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    As-tu essayé <html:text property="suggestion[0]"/> ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut
    Oui, mais toujours pareil..
    Si je ne dis pas de connerie, le suggestion (sans le "s") devrait être du type "String[][]"
    Mais comment définir dans mon form Java les getter/setter avec 2 index ?
    J'ai bien essayer de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	public String[] getSuggestion(int index) {
    		return suggestions[index];
    	}
    	public String getSuggestion(int index, int val) {
    		return suggestions[index][val];
    	}
    Mais a chaque fois il ne passe que dans le premier et donc me retourne l'adresse mémoire.

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    C'est vrai, j'avais zappé String[][]
    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <html:text property="suggestion[${idx}][0]"/>
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut
    Toujours pareil. Uniquement l'adresse mémoire.

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Comment as-tu chargé suggestions, peux-tu montrer le code ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Voici une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <logic:iterate name="totoBean" property="suggestions" id="suggestion" indexId="idx">
         <logic:iterate name="suggestion" id="item2" indexId="idx2">
               <html:text property="tableau[${idx}][${idx2}]" value="${item2}"/>
         </logic:iterate>
    </logic:iterate>
    Petite précision : dans le cas d'un String[][], il n'est pas utile de coder getter et setter indexés dans l'ActionForm.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut
    Finalement, j'ai laissé tomber le String[][], je passe avec un arraylist et j'utilise les tag nested.
    Pour l'affichage, tout va bien, par contre pour la récupération des valeurs, ca marche pas comme je veux.

    En fait j'ai initialiser mon bean (en scope session) avec 3 valeurs dans le ArrayList (l'affichage du formulaire vide me montre bien les trois valeurs)
    Je saisie des valeurs différente pour chaque champ et quand je soumet, je me retrouve avec ma ArrayList avec trois éléments, mais a chaque fois le même. ???
    J'ai essayer aussi en mettant 4 éléments, c'est pareil, en fait il ne me prend en compte que le deuxième élément (celui à l'index 1 et il le met partout).

    Je comprend pas pourquoi.

  11. #11
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Peux-tu montrer le code du nested:iterate ?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut
    Bien sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <nested:iterate property="suggestions">
    <tr>
    	<td><nested:write property="id_suggestion"/></td>
    	<td><nested:write property="id_prelevement"/></td>
    	<td><nested:text property="commentaire" indexed="yes"></nested:text></td>
    </tr>
    </nested:iterate>
    J'ai aussi essayer sans le indexed, mais le résultat est le même.
    Sinon, voici aussi le code de la classe suggestion
    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
    public class Suggestion {
     
    	private Integer id_suggestion=null;
    	private String commentaire=null;
    	private Integer id_prelevement=null;
     
    	public Suggestion() {
    		// TODO Auto-generated constructor stub
    	}
    	public String getCommentaire() {
    		return commentaire;
    	}
    	public void setCommentaire(String commentaire) {
    		this.commentaire = commentaire;
    	}
    	public Integer getId_suggestion() {
    		return id_suggestion;
    	}
    	public void setId_suggestion(Integer id_suggestion) {
    		this.id_suggestion = id_suggestion;
    	}
    	public Integer getId_prelevement() {
    		return id_prelevement;
    	}
    	public void setId_prelevement(Integer id_prelevement) {
    		this.id_prelevement = id_prelevement;
    	}
     
    }

  13. #13
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Avec les tags nested, l'attribut indexed n'est pas utile et de plus, sa valeur doit être égale à true.

    Sinon, peux-tu montrer le code html généré pour le nested:iterate ?

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut
    OK j'ai viré l'attribut indexed.
    Voici le HTML généré
    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
     
    <tr>
    	<td></td>
    	<td></td>
    	<td><input type="text" name="suggestions[0].commentaire" value=""></td>
    </tr>
    <tr>
    	<td></td>
    	<td></td>
    	<td><input type="text" name="suggestions[1].commentaire" value=""></td>
    </tr>
    <tr>
    	<td></td>
    	<td></td>
    	<td><input type="text" name="suggestions[2].commentaire" value=""></td>
    </tr>
    <tr>
    	<td></td>
    	<td></td>
    	<td><input type="text" name="suggestions[3].commentaire" value=""></td>
    </tr>
    Je rajoute les getters et setters du ActionForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public List<Suggestion> getSuggestions() {
    		return suggestions;
    	}
    	public void setSuggestions(List<Suggestion> suggestions) {
    		this.suggestions = suggestions;
    	}

  15. #15
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Tout semble correct.

    Peux-tu montrer le code qui récupère et lit l'ArrayList dans l'Action qui s'exécute au submit du formulaire ?

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut
    c'est ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    				for(Suggestion suggest:myForm.getSuggestions()){
    					System.out.println("*** prelevementAction *** prepare suggestion3 ***"+ suggest.getCommentaire());
    				}
    				System.out.println("*** prelevementAction *** prepare suggestion 4");
    				nvxPrelevement.setSuggestions(myForm.getSuggestions());
    En fait le for c'est pour l'affichage dans la console pour voir si ça tourne bien.
    D'ailleurs dans la console, j'ai a chaque fois la même valeur qui s'affiche alors que je devrais en avoir des différentes.
    J'ai vérifier en debug et au moment ou je rentre dans mon action, le formulaire est déjà mal renseigné.. pour chaque éléments suggestions j'ai toujours la même valeur.

  17. #17
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    La première fois que tu affiches la collection, son contenu est-il correct ?

    Comment l'initialises-tu ?

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut
    Au premier passage je charge avec des valeurs null
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    mySuggestionString=new ArrayList<Suggestion>();
    nullSuggestion= new Suggestion();
    nullSuggestion.setCommentaire("");
    nullSuggestion.setId_prelevement(null);
    nullSuggestion.setId_suggestion(null);
    mySuggestionString.add(nullSuggestion);
    mySuggestionString.add(nullSuggestion);
    mySuggestionString.add(nullSuggestion);
    mySuggestionString.add(nullSuggestion);
    myForm.setSuggestions(mySuggestionString);

  19. #19
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Ben sincèrement, je ne comprends pas ce qui se passe.
    Il y a sûrement une explication à ton problème mais je ne vois vraiment pas laquelle.

    Ton form-bean est bien dans le scope session ?
    Tu n'as pas codé de méthode reset() dans l'ActionForm ?

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut
    Le scope est bien session
    pas de method Reset dans l'action form.

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

Discussions similaires

  1. [logic:iterate] tableau de string et html:hidden
    Par Semhur dans le forum Struts 1
    Réponses: 10
    Dernier message: 30/09/2008, 10h33
  2. Parcourir un tableau de String avec logic:iterate
    Par casawi dans le forum Struts 1
    Réponses: 7
    Dernier message: 07/02/2008, 14h40
  3. [logic:iterate] afficher un tableau
    Par kkkkkk dans le forum Struts 1
    Réponses: 8
    Dernier message: 12/06/2007, 17h59
  4. Réponses: 8
    Dernier message: 28/12/2006, 11h42
  5. [ STRUTS ] [ LOGIC:ITERATE ] tableau dans un formulaire
    Par LoulouFifi dans le forum Struts 1
    Réponses: 3
    Dernier message: 18/06/2004, 16h19

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