tiens ValidatorActionForm c'est quoi ? ce serait pas de là que viendrait mon pb ? (je met juste un extends ActionForm)
Version imprimable
tiens ValidatorActionForm c'est quoi ? ce serait pas de là que viendrait mon pb ? (je met juste un extends ActionForm)
extends ActionForm, c'est très bien.
Il se trouve que dans l'exemple, le validator de Struts est utilisé, mais rien ne t'y oblige.
Il vaut mieux trouver la solution à ton problème actuel.
Pour moi, il n'est pas nécessaire d'implémenter une méthode reset dans l'ActionForm.
Si tu en as codé une, qu'as-tu mis dedans ?
tout juste tu as complètement raison, c'est d'ailleurs cette méthode reset() (qui en fait existait déjà, l'ActionForm je l'ai repris d'une version précédente du site, en y rajoutant ma collection) qui faisait tout déconner. J'y avais rajouté une ligne ou j'initialisais à vide ma ArrayList. J'ai supprimé cette ligne, mis le FormBean en scope session et maintenant tout marche parfaitement, comme dans un rêve...
par contre j'ai retesté avec la même configuration ms avec l'actionform en scope request et là ca marche plus, il fait la même erreur qu'avant (indexoutofboundexception)
BILAN : voici le code source fonctionnel (chez moi en tt cas) pour les gens qui tomberait sur le même pb et souhaiterait utiliser nested:iterate
le code jsp :
le code de l'ActionForm : (pr l'attribut collection)Citation:
<nested:iterate property="lstIndicateur">
<tr>
<nested:hidden property="nom"/>
<nested:hidden property="uo"/>
<nested:hidden property="ind_desc"/>
<nested:hidden property="type_qtql"/>
<td width="400" class="Forminput"> <nested:write property="ind_desc"/></td>
<td width="300" class="Forminput"> <nested:write property="uo"/></td>
<td width="100" class="Forminput"> <nested:text property="realise" size="10" maxlength="150"/></td>
</tr>
</nested:iterate>
2 remarques pr l'actionform : accesseur get avec indice ptet pas utile ms ca mange pas de pain, pas besoin de méthode reset()Citation:
private ArrayList lstIndicateur = new ArrayList();
public ArrayList getLstIndicateur() {
return (ArrayList)this.lstIndicateur;
}
public Indicateur getLstIndicateur(int i){
return (Indicateur)lstIndicateur.get(i);
}
/**
*/
public void setLstIndicateur(ArrayList a) {
this.lstIndicateur = a;
}
enfin le code d'un objet Indicateur (lstIndicateurs = collection d'objets Indicateurs)
voilà!Citation:
public class Indicateur implements Serializable {
public Indicateur() {
super();
}
private String idc_tache = null;
private String nom = null;
private String ind_desc = null;
private String type_qtql = null;
private String uo = null;
private String realise = null;
/**
* @return
*/
public String getInd_desc() {
return ind_desc;
}
/**
* @return
*/
public String getNom() {
return nom;
}
/**
* @return
*/
public String getRealise() {
return realise;
}
/**
* @return
*/
public String getType_qtql() {
return type_qtql;
}
/**
* @return
*/
public String getUo() {
return uo;
}
/**
* @param string
*/
public void setInd_desc(String string) {
ind_desc = string;
}
/**
* @param string
*/
public void setNom(String string) {
nom = string;
}
/**
* @param string
*/
public void setRealise(String string) {
realise = string;
}
/**
* @param string
*/
public void setType_qtql(String string) {
type_qtql = string;
}
/**
* @param string
*/
public void setUo(String string) {
uo = string;
}
/**
* @return
*/
public String getIdc_tache() {
return idc_tache;
}
/**
* @param string
*/
public void setIdc_tache(String string) {
idc_tache = string;
}
}
et rappel : l'ActionForm en scope session sinon ca marche pas
sinon un grand merci à Benjamin et c_nvy pour m'avoir grandement aidé!
(et il n'est pas exclu que je revienne ds 5 min avec un nouveau problème :D )
C'est cool que ça marche enfin.
Dommage que tout ne soit pas super clair...
Pitié, attends Lundi avant de resoumettre un nouveau problème :)
ah ben quand meme :wink: ouf il etait dur a regler celui la!!!!! salete de methode reset :D
Bonjour,
j'avais le meme probleme d'utilisation de nested:iterate.
Merci de votre aide.
Peut-être qu'on devrait mettre se post dans la FAQ ?
Mais j'ai un autre probleme.
Losque je soumets mon formulaire j'ai:
J'aimerais savoir si vous ayez eu la meme erreur ? et si vous saviez y resoudre ?Citation:
Envoyé par console
ci-dessous le code fait:
JSP:
Form:Code:
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 <nested:iterate property="beneficiaires"> <tr> <td><input type="checkbox" checked="true"></td> <td><nested:text property="nom"/></td> <td><nested:text property="prenom" /></td> <td><nested:text property="ageTarif" /></td> <td><nested:text property="dateNaiss" size="8" maxlength="10"/></td> <td> <nested:text property="rang" /> </td> <td> <nested:text property="zoneTarif" /> </td> <td> <nested:text property="produit" /> </td> <td><nested:text property="ald" /></td> <td> <nested:text property="adhTardive"/> </td> <td><nested:text property="adhJeune"/></td> <td class="cotisation"><nested:text property="cotisation" /> €</td> </tr> </nested:iterate>
L'action est une dispatchAction et elle ne fait rien (return null) pour le test.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public class GammeForm extends ActionForm { protected Collection beneficiaires = new ArrayList(); public Beneficiaire getBeneficiaire(int i) { return (Beneficiaire) ((List)this.beneficiaires).get(i); } public Collection getBeneficiaires() { return this.beneficiaires; } public void setBeneficiaires(Collection beneficiaires) { log.info("Bene = " + beneficiaires.getClass()); this.beneficiaires = beneficiaires; } }
Et si tu remplaces Collection par ArrayList dans GammeForm, ça donne quoi ?Citation:
java.lang.IllegalArgumentException: Cannot invoke fr.harmonie.gaweb.presentation.form.devis.GenericDevisForm.setBeneficiaires - ar
gument type mismatch
Je pense que tu aurais dû créer un nouveau post pour ton problème. :wink:
Oui mais comme c'etait tres lié au probleme (j'ai commencé par suivre la solution du post).Citation:
Envoyé par c_nvy
En fait j'ai trouvé.
Mon form hérite en fait d'un autre qui lui contient la collection.
Et apparemment struts n'aime pas l'heritage sur les form.
Merci