Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > Dojo
Dojo Forum d'entraide sur le framework Dojo
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/11/2011, 10h12   #1
Nouveau Membre du Club
 
Homme
Développeur Web
Inscription : septembre 2011
Messages : 62
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 : 62
Points : 27
Points : 27
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 :
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 :
1
2
3
<property name="heure" type="time">
            <column name="heure" length="14" not-null="false" />
        </property>
MaClasse.java :
Code :
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 :
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 :
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 ?
VinceCBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 10h13   #2
Membre éprouvé
 
Gibot Daniel
Inscription : janvier 2010
Messages : 314
Détails du profil
Informations personnelles :
Nom : Gibot Daniel
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : janvier 2010
Messages : 314
Points : 440
Points : 440
Bonjour,

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

Code :
constraints:{timePattern:'HH:mm:ss'}
Daniel_Gibot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 10h21   #3
Nouveau Membre du Club
 
Homme
Développeur Web
Inscription : septembre 2011
Messages : 62
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 : 62
Points : 27
Points : 27
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
VinceCBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 17h28   #4
Expert Confirmé
 
Avatar de emmanuel.remy
 
Emmanuel REMY
Inscription : novembre 2005
Messages : 2 844
Détails du profil
Informations personnelles :
Nom : Emmanuel REMY
Âge : 43

Informations forums :
Inscription : novembre 2005
Messages : 2 844
Points : 3 589
Points : 3 589
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.
emmanuel.remy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 18h42   #5
Expert Confirmé
 
Avatar de emmanuel.remy
 
Emmanuel REMY
Inscription : novembre 2005
Messages : 2 844
Détails du profil
Informations personnelles :
Nom : Emmanuel REMY
Âge : 43

Informations forums :
Inscription : novembre 2005
Messages : 2 844
Points : 3 589
Points : 3 589
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 :
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.
emmanuel.remy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 10h03   #6
Nouveau Membre du Club
 
Homme
Développeur Web
Inscription : septembre 2011
Messages : 62
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 : 62
Points : 27
Points : 27
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
VinceCBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h39.


 
 
 
 
Partenaires

Hébergement Web