2013-02-13 2 views
1

Dans mon domaine grails, j'ai un champ Date java.util.Date.Grails La date est acceptée en tant que chaîne

Dans mon contrôleur, je charge cette date à partir des paramètres à l'aide de SimpleDateFormate.

Pour être précis, supposons que params.date soit quelque chose comme '20/02/2013 02:30 am '. Dans le contrôleur je charge comme suit:

SimpleDateFormat simpleDateFormat = nouveau SimpleDateFormat ("jj/mm/aaaa HH: mm a"); domainInstance.date = simpleDateFormat.parse (params.date)

Lorsque cette instruction s'exécute, aucune erreur n'est détectée. Toutefois, lorsque l'instance de domaine est en cours d'enregistrement, une erreur est générée.

[typeMismatch.Domain.date, typeMismatch.date, typeMismatch.java.util.Date, typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes

[Echec de la conversion de la valeur de propriété du type 'java.lang.String' en le type requis 'java.util.Date' pour la propriété 'date'; l'exception imbriquée est java.lang.IllegalArgumentException: Impossible d'analyser la date: Date impossible: "20/02/2013 02:30 am"]

Pouvez-vous me dire où les choses vont mal? Je suis à peu près sûr que SimpleDateFormat analyse String to Date. Pourquoi accepte-t-il en tant que chaîne?

+0

nous pouvons regarder l'ensemble du code source dans cette méthode? après cette ligne de code (domainInstance.date = simpleDateFormat.parse (params.date)), vous avez peut-être réaffecté le champ 'date' avec la valeur de la chaîne à partir des paramètres. – hida

+0

Les changements depuis 2.3 jetez un coup d'oeil ici: http://grails.1312388.n4.nabble.com/data-binding-dates-in-command-objects-td4651879.html @BindingFormat ('MMddyyyy') Vous pouvez également définir le formats par défaut avec quelque chose comme ça dans Config.groovy: grails.databinding.dateFormats = ['MMddyyyy', 'aaaa-MM-jj HH: mm: ss.S', "aaaa-MM-dd'T'hh: mm: ss'Z '"] – Vahid

Répondre

0

Vous pouvez essayer:

domainInstance.date = new Date().parse("dd/MM/yyyy HH:mm a", params.date) 
5

Merci pour la réponse, mais j'ai trouvé la solution au problème. Le problème était quelque chose comme ça.

J'instanciais mon domaineInstance comme domainInstance = new Domain (params) C'était la première instruction dans l'action du contrôleur.

Lorsque cette instruction est exécutée, params conserve la date au format "jj/MM/aaaa HH: mm a". Par conséquent, cette instruction ajoute une erreur dans l'objet domainInstance.

Plus tard, après l'utilisation de SimpleDateFormat, la variable est mise à jour mais l'erreur reste dans l'objet à cause de laquelle l'erreur apparaît.

La solution à cette erreur est immédiatement après l'instruction 'domainInstance = new Domain (params)' appelle l'instruction domainInstance.clearErrors().

Ceci efface toutes les erreurs dans l'objet. Plus tard, lorsque la propriété domainInstance est enregistrée, la validation est appelée. Dans le cas où la validation échoue en raison d'une autre erreur, l'erreur correspondante est alors ajoutée.

Rammohan

1

Grails 2.3.1 est le problème réel

def domain = new FooBar(params) 
domain.clearErrors() 
domain.save(flush:true) // <--- validation will be there 
if (doamin.hasErrors()) { 
... do something 
} 
Questions connexes