IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

conversion de date


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 45
    Par défaut conversion de date
    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.

  2. #2
    Membre chevronné
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Par défaut
    Concernant le problème de PropertyEditor, il faut voir si le besoin de "souplesse" apporte un réel avantage métier et justifie la mise en place d'une usine à gaz (je dis ca parceque la demande n'est vraiment pas standard et ne me semble pas vraiment justifiable). Par contre, je pense qu'il est tout à fait envisageable de créer un PropertyEditor tenant compte de la Locale de l'utilisateur (dans le cas de l'i18n, je peux comprendre le réel besoin métier).

    Concernant la problèmatique d'i18n :
    - lève une IllegalArgumentException avec un message écrit dans la langue que tu utilises pour les logs
    - ajoute ceci dans ton fichier message.properties :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typeMismatch.java.util.Date=Format de date invalide.
    - si tu veux personnaliser le message selon le champ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typeMismatch.dateDebut=La date de debut est incorrecte.
    typeMismatch.dateFin=La date de fin est incorrecte
    avec dateDebut et dateFin les noms de champs de ton formulaire
    Pour plus d'infos : http://static.springframework.org/sp...sResolver.html

    PS : il est préférable de mettre setLenient(false) pour ne pas accepter des 31 février

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 45
    Par défaut
    merci pour ta reponse.

    pour la souplesse je suis presque obligé sinon je vais etre harcelé au téléphone par des gens qui me diront "allo, pourquoi ca marche pas ?" car chacun a ces petites manie. Et meme un message d'avertissement n'y fera rien. mais je suis daccord avec toi niveau métier c'est plus une charge qu'autre chose.

  4. #4
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Par défaut
    Une solution pour les dates, c'est d'utiliser un composant ( JSF, Swing, Javascript ) de selecteur de date. Cela permet de fixé le format tout en permettant une utilisation simple pour l'utilisateur
    Hikage
    SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
    [Personal Web] [CV]

    F.A.Q Spring Framework - Participez !

Discussions similaires

  1. Conversion de date
    Par jdu dans le forum Access
    Réponses: 2
    Dernier message: 26/01/2005, 17h17
  2. Conversion de dates
    Par Gogoye dans le forum Modules
    Réponses: 5
    Dernier message: 10/08/2004, 12h39
  3. - [CAST ou CONVERT] Problème de conversion de date
    Par Boublou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 15h31
  4. Conversion de date lors d'un import
    Par bilbon.S dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 26/03/2004, 15h33
  5. Conversion de date et division 64 bits
    Par dway dans le forum Assembleur
    Réponses: 38
    Dernier message: 27/01/2004, 11h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo