bonjour

je sais que grace a la méthode initbinder on peut comvertir un objet Date en string et inversement mais le probleme c'est que l'utilisateur aime bien la souplesse et veut donc pouvoir saisir soit 12/12/2003 ou 12-12-2003 ou encore comble du luxe 12-12-03 (mais pour l'affichage on ne retiendra que la premiere solution ). Or l'objet CustomDateEditor ne permet qu'un format de date.

pour pallier ce probleme j'ai bien trouver une solution mais il n'existerai pas une autre méthode :

j'ai redefini un objet customDateEditor
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
 
import java.text.DateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
import org.springframework.beans.propertyeditors.CustomDateEditor;
 
public class CustomDateEditorBis extends CustomDateEditor {
 
	private List<DateFormat> inFormat;
	public CustomDateEditorBis(DateFormat dateFormat, boolean allowEmpty) {
		super(dateFormat, allowEmpty);
		inFormat = new ArrayList<DateFormat>();
		inFormat.add(dateFormat);
 
 
	}
	public CustomDateEditorBis(DateFormat outFormat,List<DateFormat> inFormat, boolean allowEmpty) {
		super(outFormat, allowEmpty);
		this.inFormat = inFormat;
	}
 
	public void setAsText(String text){
		boolean ok=false;
		for (Iterator<DateFormat> iterator = this.inFormat.iterator(); iterator.hasNext() && !ok;) {
			DateFormat dateFormat =  iterator.next();
			try {
				this.setValue(dateFormat.parse(text));
				ok=true;
			} catch (ParseException e) {
				ok=false;
			}
		}
		if (!ok){
			throw new IllegalArgumentException();
		}
 
	}
 
}
Dans mon controleur :
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
 
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
		// format attendu pour la date de naissance
 
		SimpleDateFormat dateFormat1 = new SimpleDateFormat("dd/MM/yy");
		dateFormat1.setLenient(true);
		SimpleDateFormat dateFormat2 = new SimpleDateFormat("dd-MM-yy");
		dateFormat2.setLenient(true);
		SimpleDateFormat dateFormat3 = new SimpleDateFormat("dd/MM/yyyy");
		dateFormat1.setLenient(true);
		SimpleDateFormat dateFormat4 = new SimpleDateFormat("dd-MM-yyyy");
		dateFormat2.setLenient(true);
		List<DateFormat> listInFormat = new ArrayList<DateFormat>();
		listInFormat.add(dateFormat1);
		listInFormat.add(dateFormat2);
		listInFormat.add(dateFormat3);
		listInFormat.add(dateFormat4);
		CustomDateEditorUlco editor = new CustomDateEditorBis(dateFormat3,listInFormat, false);
 
		binder.registerCustomEditor(java.util.Date.class, null,editor);
 
	}
bon ca marche ok mais bon j'aime pas trop jouer sur les exceptions.

Et une autre question comment mettre un message d'erreur dans l'objet "command" ailleur que dans un "validator" ? Car la je balance un IllegalArgumentException mais j'aimerai pourvoir lui affecter un message de mon message.properties.