Bonjour à tous,

Je suis un petit peu perplexe quant au fonctionnement de struts pour "peupler" les formulaires. En effet, j'ai choisi d'utiliser une ArrayList<FormFile> afin de pouvoir remplir dynamiquement mon formulaire en fonction du nombre d'éléments à uploader et je ramasse systématiquement une erreur lors du submit à moins d'initialiser la liste en amont au moment d'afficher la jsp...

Ainsi, ce code génère l'erreur

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
ArrayList<FormFile> listeFichier;
 
Constructeur () {
  listeFichier= new ArrayList<>();
}
public FormFile getListeFichier(int pIndex) {
	return this.listeFichier.get(pIndex);
}
 
public void setListeFichier(int pIndex,FormFile pFichier) {
	this.listeFichier.set(pIndex,pFichier);
}
Par contre, si je force l'instanciation d'un ou plusieurs éléments, ça marche et je retrouve bien mon fichier en position 0 dans l'action :
Code qui fonctionne.

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
 
ArrayList<FormFile> listeFichier;
 
Constructeur () {
  listeFichier= new ArrayList<>();
  for (int i=0;i<=10;i++)
  {
     this.listeFichier.add(null);
  }
}
public FormFile getListeFichier(int pIndex) {
	return this.listeFichier.get(pIndex);
}
 
public void setListeFichier(int pIndex,FormFile pFichier) {
	this.listeFichier.set(pIndex,pFichier);
}
Du coup, je ne vois pas bien l'intérêt de recourir à une liste si c'est pour se retrouver avec le fonctionnement d'un tableau.

J'ai cherché et j'ai testé un peu tout comme un add dans le getter et dans le setter si l'index est supérieur ou égal à la taille.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
for (int i=this.listeFichier.size();i<=pIndex;i++)
{
	this.listeFichier.add(null);
}
Et que dalle.
Soit il y a un truc que j'ai pas compris, soit struts ne gère en fait que des tableaux et ce n'est pas la peine d'insister.
Si quelqu'un a la réponse...

Edit : Bon, j'ai mis la version 1.3.10 et le comportement change (probablement un bug de la version que j'avais).