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

Bibliothèques & Frameworks Discussion :

Insertion d'un TimeTextBox en PgSQL


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Points : 75
    Points
    75
    Par défaut Insertion d'un TimeTextBox en PgSQL
    Bonjour,
    A savoir : J'utilise Struts2 + Hibernate + Dojo
    J'ai un formulaire dans lequel j'ai un TimeTextBox dans un formulaire, et je n'arrive pas à l'insérer dans ma base Postgres (C'est un peu le même probleme que sur ce topic)

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     <s:textfield  name="maClasse.heure"
                                data-dojo-type="dijit.form.TimeTextBox"
                                data-dojo-props="name: 'maClasse.heure'"/>
    Le problème est que la "value" générée (si je sélectionne "10:00" par ex) est du type : Date {Thu Jan 01 1970 10:00:00 GMT+0100}, ce qui ne plait pas du tout à hibernate. (Ma propriété "heure" de ma classe "maClasse" est de type "TIME" - Voir code ci-dessous- , idem dans la base. Avant elle etait de type "DATE" et j'avais le même problème)
    maClasse.hbm.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <property name="heure" type="time">
                <column name="heure" length="14" not-null="false" />
            </property>
    MaClasse.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private Date heurePremVisite;
     
    @Temporal(TemporalType.TIME)
    @Column(name = "heure_prem_visite", nullable = true, length = 14)
    public Date getHeurePremVisite() {
        return this.heurePremVisite;
    }
    J'ai essayé de le "feinter" en mettant un champ type "hidden" en dessous de mon TimeTextBox, pour lui passer la valeur affichée dans le TimeTextBox, ce qui me permettrait d'envoyer un String à Hibernate, au lieu d'un objet Date (j'ai pu résoudre mon problème du lien précédent de cette façon).
    Ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <s:textfield
                                name="heure_old"
                                data-dojo-type="dijit.form.TimeTextBox"
                                data-dojo-props="onChange:function(){ document.getElementById('add_heure').value=this.displayedValue;},
                                onBlur:function(){ document.getElementById('add_heure').value=this.displayedValue;}"/>
                            <s:hidden
                                id="add_heure" 
                                name="maClasse.heure"
                                data-dojo-type="dijit.form.TextBox"
                                data-dojo-props="name: 'maClasse.heure'"/>
    Ce qui me permet bien d'envoyer "10:00" en String, mais j'ai toujours une erreur du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ATTENTION: Error setting expression 'maClasse.heure' with value '[Ljava.lang.String;@764c0de'
    .

    J'ai testé d'insérer "à la main" un enregistrement dans la base (avec SQLManager), j'ai vu que par défaut ca me demande de l'insérer sous la forme : HH:MM:SS . J'ai donc essayé de rentrer directement ca dans mon champ hidden (que j'ai passé en visible pour le test) => Idem.
    J'ai ensuite essayé d'exporter l'enregistrement que j'avais inséré a la main dans ma base, en .sql pour voir le code généré => Je remarque que l'heure est sous la forme : HH:MM:SS.milliSec. Je retente de saisir une valeur de cette forme dans mon textfield => Idem encore ...

    Je bloque vraiment et j'ai vraiment besoin de résoudre ce soucis, quelqu'un aurait il une idée svp ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2010
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2010
    Messages : 322
    Points : 535
    Points
    535
    Par défaut
    Bonjour,

    Essayez d'ajouter une contrainte d'affichage sur votre timeTextBox.
    Du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    constraints:{timePattern:'HH:mm:ss'}

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Points : 75
    Points
    75
    Par défaut
    Bonjour,

    J'ai déjà essayé et ca ne marche pas.
    Une solution que j'ai trouvé a été de :
    1. Créer un champ de type TIME dans ma table
    2. Rajouter un champ type hidden que je rempli en sélectionnant une heure sur mon TimeTextBox
    3. Ce champ ne doit pas seulement contenir l'heure, mais aussi une date pour s'insérer correctement, on aura donc un champ ayant pour value par exemple : 20/11/2011 11:45. (Pour le formatage de ce champ j'utilise une petite fonction JS toute simple qui me défini une "value" formatée "DATE HEURE"

    Ce n'est pas la façon la plus propre de faire ca, mais c'est la seule que j'ai trouvé

    Merci de ta réponse quand même

  4. #4
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Hello,

    C'est la fonction seralize() de la class dijit/form/_DateTimeTextBox.js qui effectue le job de serialization de la date au format que tu obtiens. Tu peux la surcharger (simplement par un extend ou un mixin si cela n'a pas d'effet de bord pour ta page)

    ERE
    Quand une tête pense seule, elle devient folle.

  5. #5
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Oups. Ma réponse précédente était un peu rapide. Cela dépend notamment de l'utilisation que tu as de ta TimeTextBox (et même souci avec la DateTextBox).
    Techniquement la value stockée par le contrôle est TOUJOURS un objet date. Après tout dépend de ta façon de faire le post du formulaire: utilises tu un dijit.form.Form ou une simple balise form ? Ce que tu obtiens là est le toString() de l'objet Date.

    Note déjà que si tu redéfinis ce toString cela réglera ton souci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Date.prototype.toString = function(){
      return dojo.date.locale.format(this, {formatLength: "long", selector: "date", datePattern: 'dd/MM/yyyy'});
    };
    Maintenant tu as aussi la possibilité de changer la valeur sur le onsubmit, et ce encore plus facilement si tu utilises un dijit.form.Form.

    Enfin, attention car la version 1.7 de dojo a réglé pas mal de souci en terme de serialization des dates.

    ERE
    Quand une tête pense seule, elle devient folle.

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Points : 75
    Points
    75
    Par défaut
    Merci de ta réponse,
    Je n'ai pas le temps de tester ceci actuellement, mais dès que j'ai un peu de temps, je teste ca et je te tiendrai au courant.

    Merci

Discussions similaires

  1. Insertion de varchar de SQLserver vers PgSql
    Par cyril_c24 dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 21/01/2015, 07h53
  2. Insertion d'un TimeTextBox en PgSQL
    Par VinceCBA dans le forum Hibernate
    Réponses: 0
    Dernier message: 30/11/2011, 13h58
  3. PL/pgSQL select vers insert
    Par Agoudard dans le forum Requêtes
    Réponses: 1
    Dernier message: 09/02/2011, 23h22
  4. [Dojo] TimeTextBox et Insertion Mysql
    Par KiMbOoO dans le forum Bibliothèques & Frameworks
    Réponses: 6
    Dernier message: 02/06/2009, 15h56
  5. Insertion des tuples dans la base avec un code PL/pgSQL.
    Par Rony Rauzduel dans le forum Requêtes
    Réponses: 0
    Dernier message: 17/01/2009, 15h17

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