Das Lesen der g: Datepicker-Wert in Grails, ohne die „new Object (params)“ mit - Verfahren
-
22-08-2019 - |
Frage
Lassen Sie uns sagen, ich habe eine Datepicker genannt "Foobar":
<g:datePicker name="foobar" value="${new Date()}" precision="day" />
Wie lese ich den vorgelegten Wert dieser Datumsauswahl?
Eine Möglichkeit, die funktioniert, aber hat einige unerwünschte Nebenwirkungen ist die folgende:
def newObject = new SomeClassName(params)
println "value=" + newObject.foobar
Auf diese Weise, es zu tun alle eingereichten Felder in newObject liest das ist etwas, ich will zu vermeiden. Ich bin nur daran interessiert, den Wert der „foobar“ ein.
Die Art und Weise ursprünglich angenommen ich dies getan werden kann, war:
def newObject = new SomeClassName()
newObject.foobar = params["foobar"]
Aber Grails scheint nicht automatisch die Übersetzung des foobar Feldes in ein Date () Objekt zu tun.
Aktualisiert: Weitere Informationen finden Sie im Grails JIRA gefunden werden .
Lösung 2
Das Lesen der g: picker Wert viel einfacher in Grails 1.2 wurde (siehe Release Notes ):
Besseres Datum Parsen
Wenn Sie senden Sie einen Termin aus einem Etikett, das Date-Objekt zu erhalten, ist jetzt als einfach, wie es oben von der Suche params Objekt nach Namen (z. B. params.foo )
Andere Tipps
Mit dem Befehlsobjekt Idiom. Im Fall von Ihrem Beispiel gehe ich davon aus, dass das Formular der Aktion handleDate
nennt. Innerhalb der Steuerung:
def handleDate = { FoobarDateCommand dateCommand ->
def theNextDay = dateCommand.foobar + 1
}
Hier ist FoobarDateCommand
. Beachten Sie, wie Sie das Feld das gleiche wie in der Ansicht Namen:
class FoobarDateCommand {
Date foobar
}
Befehlsobjekte sind eine praktische Möglichkeit, alle Validierungsaufgaben für jedes Ihrer Formulare zu verkapseln, Ihre Controller schön und klein zu halten.
Wenn ein param sagt eine „Struktur“ zu sein, bedeutet dies, gibt es eine Reihe von params seinen Wert zu repräsentieren. In Ihrem Fall gibt es:
- params [ "foobar_year" Speichern Jahr
- params [ "foobar_month"] Speichern Monat
- params [ "foobar_day"] Speichern Tag
Sie sie einfach holen und tun, was Sie wollen:)
Sie müssen noch das Format obwohl
wissendef newObject = new SomeClassName()
newObject.foobar = Date.parse('yyyy-MM-dd', params.foobar)