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

Struts 1 Java Discussion :

Bean populate quand type String devient Date


Sujet :

Struts 1 Java

  1. #1
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 897
    Points
    1 897
    Par défaut Bean populate quand type String devient Date
    Voici la balise suivante qui référence un String nommé datePesee dans le ActionForm :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <nested:write property="pesee.datePesee" />

    L'affichage et la soumission du formulaire fonctionne bien.

    Maintenant je désire changer le type de la variable String en Date. Donc la variable devient dans le ActionForm :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // définition
    private Date datePesee;
     
    // accesseurs
    public Date getDatePesee()
        {
            return datePesee;
        }
     
        public void setDatePesee(Date datePesee)
        {
            this.datePesee = datePesee;
        }

    Le formulaire s'affiche toujours bien dans ce cas mais sa soumission déclenche l'exception suivante :

    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
     
    javax.servlet.ServletException: BeanUtils.populate
     
    ...
     
    java.lang.IllegalArgumentException: Cannot invoke types.Pesee.setDatePesee - argument type mismatch
    	org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:1778)
    	org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:1759)
    	org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:1648)
    	org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:1677)
    	org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1022)
    	org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811)
    	org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:298)
    	org.apache.struts.util.RequestUtils.populate(RequestUtils.java:467)
    	org.apache.struts.chain.commands.servlet.PopulateActionForm.populate(PopulateActionForm.java:50)
    	org.apache.struts.chain.commands.AbstractPopulateActionForm.execute(AbstractPopulateActionForm.java:60)
    	org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
    	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    	org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
    	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    Pourquoi ?

    Merci.

  2. #2
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Tu ne peux pas récuperer une variable d'un formulaire sous forme de Date,int,double,etc... dans ton ActionForm, il faut utiliser uniquement un String.

    De plus en java tu n'as pas de constructeur qui te fait directement Date = "11/09/2007".

    Par contre rien ne t'empeche de surcharger la methode set de ta variable ActionForm afin d'attribuer une valeur a ta variable Date.

    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
     
    // définition
    private Date datePesee;
    private String datePeseeStr;
     
    // accesseurs
    public Date getDatePeseeStr()
        {
            return datePesee;
        }
     
        public void setDatePeseeStr(String str)
        {
            this.datePeseeStr = str;
            this.datePesee= FonctionDeConversion( str );
        }

  3. #3
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 897
    Points
    1 897
    Par défaut
    Dans la FAQ Struts il y a un exemple pour permettre l'implémentation du type Date dans un ActionForm.

    Merci.

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Attention quand même...
    Effectivement on peut (avec struts-layout) convertir String->Date et inversement "automatiquement" MAIS, il y a un problème si on veut utiliser plusieurs Locales et donc plusieurs formats de date.
    Le mieux (retour d'expérience) est de tout mettre en String dans l'ActionForm et de convertir dans l'action, là, on a accès à tout et on peut gérer correctement les erreurs... c'est mon avis...

    A+

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : Tunisie

    Informations forums :
    Inscription : Août 2002
    Messages : 141
    Points : 97
    Points
    97
    Par défaut
    Bonjour,
    j'ai développer mes propres methodes pour convertir mes dates, dont le contenu est le suivant:
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    import java.sql.Timestamp;
     
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
     
    import java.util.Calendar;
    import java.util.Date;
     
    public class ConversionDeChamps {
     
        public static Timestamp stringToDate(String sDate) throws Exception {
            SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
            long timeInMillis;
            Timestamp timestamp=null;
            if(sDate.trim().length() != 0){
                timeInMillis = sdf.parse(sDate).getTime();
                timestamp = new Timestamp(timeInMillis);
            }
            return timestamp;
        }
     
        public static String dateToString(Timestamp dString) throws Exception{
            DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
            String dateString="";
            if(dString != null)
                dateString = dateFormat.format(dString);
            return dateString;
        }
        public static Long diffDate(Timestamp timeStamp1,Timestamp timeStamp2) throws Exception {
            long jourDifference = 0;
            double nbJours=0;
            if((timeStamp1 != null) && (timeStamp2 != null)){
    /*
            Calendar calendarDateDebut = Calendar.getInstance();
            Calendar calendarDateFin = Calendar.getInstance();
            calendarDateDebut.setTime(timeStamp1);
            calendarDateFin.setTime(timeStamp2);
            if(timeStamp1 .compareTo(timeStamp2)>=0){
                jourDifference =  (calendarDateDebut.get(Calendar.DAY_OF_YEAR) + (calendarDateDebut.get(Calendar.YEAR) * 365)) - (calendarDateFin.get(Calendar.DAY_OF_YEAR) + (calendarDateFin.get(Calendar.YEAR) * 365));
            } else {
                jourDifference =  (calendarDateFin.get(Calendar.DAY_OF_YEAR) + (calendarDateFin.get(Calendar.YEAR) * 365)) - (calendarDateDebut.get(Calendar.DAY_OF_YEAR) + (calendarDateDebut.get(Calendar.YEAR) * 365));
            }
            }
            return jourDifference;
    */
             long nbMilliSec = timeStamp2.getTime() - timeStamp1.getTime();
             nbJours = ((double)nbMilliSec) / (1000 * 3600 * 24);
            }
             return Math.abs(Math.round(nbJours));
        }
        public static Float myPow(Float n,Long p) throws Exception {
            Float r = Float.valueOf("0");
            if(p <= 0){
                return Float.valueOf("1");
            }
            return myPow(n,p-1)*n;
        }
        public static Boolean dateValide(String maDate) throws Exception {
            String pattern = "dd-MM-yyyy";
            try {
                    DateFormat dateFormat = new SimpleDateFormat(pattern);
                    dateFormat.setLenient(false);
                    dateFormat.parse(maDate);
                    return true;
                    // ton code si date ok ...
            }  catch (Exception e) {
                    // La date ne matche pas le pattern
                    // ton code si date non valide ...
                    return false;
            }
        }
    }

  6. #6
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 897
    Points
    1 897
    Par défaut
    Merci à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Champ de type String en date
    Par Abed_H dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 20/02/2010, 23h27
  2. Conversion d'un type string vers date
    Par projetM dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 27/11/2008, 14h09
  3. Réponses: 5
    Dernier message: 21/08/2007, 11h33
  4. Controle d'une Date declaré par le type String.
    Par Mobistar dans le forum Langage
    Réponses: 4
    Dernier message: 21/01/2007, 15h46
  5. Convertir une date en type string
    Par ziboux dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 29/10/2003, 10h52

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