Bonjour,

Je suis en train de développer une page JSP pour insérer des personnes dans un tableau HTML(<table />) et ensuite sur cette page, j'ai un submit pour envoyer mon tableau (toutes les données insérées dans mon tableau)au controlleur Spring MVC.

Ma commande au point de vue Spring MVC(représentation de mon formulaire) côté classe Java est :
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
 
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class CommandPersonne {
 
@Getter
@Setter
private List<Personne> personnes=new ArrayList<Personne>();
}
 
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Personne {
	@Getter
	@Setter
	private Long id;
 
	@Getter
	@Setter
	private String nom;
 
	@Getter
	@Setter
	private String prenom;
 
	@Getter
	@Setter
	private Date dateDeNaissance;
}
Pour le moment tout va bien, je retourne bien cette liste dans mon controlleur avec les valeurs remplies au niveau de ma JSP.

Je souhaiterais mettre en place un Editor(java.beans.PropertyEditorSupport) car j'ai besoin de faire un traitement spécial sur cette liste.
J'ai déjà fait cela pour le type Date, et cela marche nickel ...

Donc, j'ai crée un Editor et c'est là que le problème arrive
Dans mon controlleur qui travaille avec ma JSP :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
@InitBinder
	public void initBinder(WebDataBinder binder) {
		binder.registerCustomEditor(Date.class, new CustomDateEditor(DateUtils.createDateFormatter(LocaleContextHolder.getLocale()), true)); //OK
		binder.registerCustomEditor(ArrayList.class, "personnes", new CustomPersonnesEditor(ArrayList.class, true));//Nok
	}
Voici ma classe Editor qui me pose problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
import org.springframework.beans.propertyeditors.CustomCollectionEditor;

public class CustomPersonnesEditor extends CustomCollectionEditor {

	public CustomPersonnesEditor(Class<? extends Collection> collectionType, boolean nullAsEmptyCollection) {
		super(collectionType, nullAsEmptyCollection);
	}

	@Override
	public void setValue(Object value) {
		super.setValue(value); //LIGNE 18
	}
Bon, aprés avoir poser le contexte de mon soucis, voici mon problème :
J'ai mis un point d'arrêt sur la LIGNE 18 avec Eclispe, j'y passe bien mais le paramètre Object value est bien de type ArrayList(non NULL !!) mais avec aucun élément(size=0) ?????? et je ne comprends pas pourquoi, je n'ai pas cette liste(=value) avec les personnes remplis depuis ma JSP ??? je pensais que le paramètre value contiendrait ma liste de personnes...et ensuite je pourrais faire mon traitement spécial dans la méthode setValue(Object value) afin que la liste dans ma classe CommandPersonne soit comme souhaité avnat de la renvoyer à la JSP ou l'envoyer dans la couche service pour insertion en BD.

Pourtant dans ma commande, j'ai bien mon attribut personnes(List<Personne>) avec les données remplies avec ma JSP (vu en debug dans mon controleur). En plus, qd je reviens depuis mon controleur sur ma JSP, le tableau se re-remplit bien avec les personnes comme lors de la saisie (JSP1 saisie -> Controleur -> JSP1 affichage et saise en plus si l'utilisateur le souhaite).

Pourquoi ma value (paramètre d'entrée de la méthode setValue de la classe CustomPersonnesEditor) ne contient pas les éléments de ma liste? Comment se fait le binding des listes avec Spring MVC ? j'ai bien compris pour le type Date mais pour la liste, il me manque une explication...
Mais à quoi sert cette classe CustomCollectionEditor ?

merci d'avance pour votre aide, conseils, lumières sur ce point qui me laisse perplexe pour le moment ...