La lecture du g: Datepicker valeur en Grails sans utiliser le « new Object (params) » - méthode
-
22-08-2019 - |
Question
Disons que j'ai un DatePicker appelé "foobar":
<g:datePicker name="foobar" value="${new Date()}" precision="day" />
Comment puis-je lire la valeur soumise de cette dattier?
Une façon qui fonctionne, mais a des effets secondaires indésirables est le suivant:
def newObject = new SomeClassName(params)
println "value=" + newObject.foobar
Cette façon de le faire lire tous les champs soumis dans newObject ce qui est quelque chose que je veux éviter. Je suis seulement intéressé par la valeur du champ « foobar ».
La façon dont je l'origine supposais cela pourrait se faire était:
def newObject = new SomeClassName()
newObject.foobar = params["foobar"]
Mais Grails ne semble pas faire automatiquement la traduction du champ foobar dans un objet Date ().
Mise à jour: Des informations supplémentaires sont disponibles dans le Grails JIRA .
La solution 2
Lecture de la g: valeur Datepicker est devenu beaucoup plus facile à Grails 1.2 (voir notes de version ):
Une meilleure analyse syntaxique date
Si vous soumettez une date d'un étiquette, l'obtention de l'objet Date est maintenant simple que de regarder vers le haut de la objet params par nom (par ex. params.foo )
Autres conseils
Utilisez l'idiome . Dans le cas de votre exemple, je suppose que votre formulaire appelle la handleDate
d'action. A l'intérieur du contrôleur:
def handleDate = { FoobarDateCommand dateCommand ->
def theNextDay = dateCommand.foobar + 1
}
Voici FoobarDateCommand
. Remarquez comment vous nommez le champ le même que dans la vue:
class FoobarDateCommand {
Date foobar
}
Les objets de commande sont un moyen pratique pour encapsuler toutes les tâches de validation pour chacun de vos formulaires, en gardant vos contrôleurs agréable et petit.
Quand un dit être param un « struct », cela signifie qu'il ya un certain nombre de params pour représenter sa valeur. Dans votre cas, il y a:
- params [ "foobar_year" année de stockage
- params [ "foobar_month"] mois de stockage
- params [ "foobar_day"] jour de stockage
Il suffit de les chercher et à faire tout ce que vous voulez:)
Vous avez encore besoin de connaître le format que
def newObject = new SomeClassName()
newObject.foobar = Date.parse('yyyy-MM-dd', params.foobar)