Das Lesen der g: Datepicker-Wert in Grails, ohne die „new Object (params)“ mit - Verfahren

StackOverflow https://stackoverflow.com/questions/534330

  •  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 .

War es hilfreich?

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

wissen
def newObject = new SomeClassName()
newObject.foobar = Date.parse('yyyy-MM-dd', params.foobar)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top