Au fait, tu n'as pas codé de getter et setter indexés dans l'ActionForm ?
parce que si c'est le cas, il faut les enlever.
Sinon, peux-tu préciser quelle version de Struts tu utilises ?
Struts 1.3.8, je vérifie demain pour les getter et setter indexer dans le ActionForm.
Si ça ne fonctionne toujours pas demain, tu pourrais éventuellement essayer avec un logic:iterate, l'attribut indexed="true" sur le tag html:text et getter et setter indexé dans l'ActionForm.
Mais bon, normalement, il est plus simple d'utiliser les tags nested.
J'ai vérifier, je n'ai pas de getter et setter indexer. Je vais tester avec le logic iterate.
J'ai essayer avec le logic iterate, mais je dois pas être doué, ca marche pas.
Pas d'autre pistes pour les tag nested ?
Une question que je n'ai pas pensé à te poser : as-tu mis le tag nested:iterate dans un tag nested:form ?
Sinon, pour le logic:iterate, il faut coder ceci dans la jsp :
et ajouter getter et setter indexé sur l'objet Suggestion dans l'ActionForm :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <logic:iterate property="suggestions" id="suggestion"> <tr> <td><bean:write name="suggestion" property="id_suggestion"/></td> <td><bean:write name="suggestion" property="id_prelevement"/></td> <td><html:text name="suggestion" property="commentaire" indexed="true"/></td> </tr> </logic:iterate>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public Suggestion getSuggestion(int i) { return (Suggestion) this.suggestions.get(i); } public void setSuggestion(int i,Suggestion suggestion) { this.suggestions.set(i,suggestion) ; }
J'ai pas de <nested:form>
Il faut le mettre en remplacement du <html:form> ?
Tout à fait.
Mais bon, je ne pense pas que cela corrige ton problème pour autant.
J'ai déjà testé un nested:iterate dans un html:form, ça fonctionnait très bien.
J'ai fait la modif mais toujours pareil.
Sinon, j'ai essayer ton code pour les logic iterate, mais il ne m'enregistre que la valeur du 1er champ.. J'ai regarder à l'entré du action form, les 4 zones sont renseigner avec la valeur du premier.. c'est vraiment bizarre.
As-tu le même problème si tu mets le chargement de la liste avec des valeurs null dans la méthode reset de l'ActionForm ?
Et peux-tu montrer le code complet de l'ActionForm ?
Voici le code complet
C'est la version pour les tag nested.
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99 package XXX.forms; import XXX.metier.prelevements.Suggestion; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; @SuppressWarnings("serial") public class PrelevementForm extends ActionForm{ private Integer id=null; private String commentaire=null; private String date_saisie_fiche=null; private Integer cg=null; private Integer client=null; private Integer famille=null; private String[] defauts=null; private String typeaction=null; private List<Suggestion> suggestions=new ArrayList<Suggestion>(); public PrelevementForm() { // TODO Auto-generated constructor stub System.out.println("constructeur prelevement"); } public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); return errors; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getCommentaire() { return commentaire; } public void setCommentaire(String commentaire) { this.commentaire = commentaire; } public String getDate_saisie_fiche() { return date_saisie_fiche; } public void setDate_saisie_fiche(String date_saisie_fiche) { this.date_saisie_fiche = date_saisie_fiche; } public Integer getCg() { return cg; } public void setCg(Integer cg) { this.cg = cg; } public Integer getClient() { return client; } public void setClient(Integer client) { this.client = client; } public Integer getFamille() { return famille; } public void setFamille(Integer famille) { this.famille = famille; } public String[] getDefauts() { return defauts; } public String getDefaut(int index){ return defauts[index]; } public void setDefauts(String[] defauts) { this.defauts = defauts; } public void setDefaut(int index, String value){ this.defauts[index]=value; } public String getTypeaction() { return typeaction; } public void setTypeaction(String typeaction) { this.typeaction = typeaction; } public List<Suggestion> getSuggestions() { return suggestions; } public void setSuggestions(List<Suggestion> suggestions) { this.suggestions = suggestions; } }
Par contre pour implémenter la méthode reset...
En s'inspirant du code que tu as mis dans l'Action, cela donnerait ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public void reset(ActionMapping mapping, HttpServletRequest request) { this.suggestions=new ArrayList<Suggestion>(); this.suggestions.add(new Suggestion()); this.suggestions.add(new Suggestion()); this.suggestions.add(new Suggestion()); this.suggestions.add(new Suggestion()); }
Ca y est j'ai trouvé....
Je suis une grosse tanche. Dans mes inits, j'ajoutais à chaque fois le même éléments, je ne faisait pas de new à chaque fois.
J'avais compris que tu initialisais ta liste avec des valeurs null.
Si tu pré-remplis ta liste avec des valeurs, il est vrai que si tu oublies le new, tu ajoutes toujours le même élément.
En fait, moi je pensais que c'était lorsque tu saisissais les commentaires que ça ne fonctionnait pas. Et c'est pour cela que je ne comprenais pas ce qui se passait.
Bon, n'oublie pas le tag alors.
C'est fait...
En fait j'initialisai avec un objet dont les propriété étaient null mais a chaque fois le même, donc quand j'en mettais 1 à jour les autres suivaient...
Je suis un gros
Tag positionné
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager