Leggendo il g: datepicker qualità-prezzo in Grails senza utilizzare il “new Object (params)” - Metodo
-
22-08-2019 - |
Domanda
Diciamo che ho un DatePicker chiamato "foobar":
<g:datePicker name="foobar" value="${new Date()}" precision="day" />
Come faccio a leggere il valore inviato di questa data-picker?
Un modo che funziona, ma ha alcuni effetti collaterali indesiderati è la seguente:
def newObject = new SomeClassName(params)
println "value=" + newObject.foobar
Questo modo di fare si legge tutti i campi presentati in newObject che è qualcosa che voglio evitare. Mi interessa solo il valore del campo "foobar".
Il modo in cui ho inizialmente pensato questo potrebbe essere fatto è stato:
def newObject = new SomeClassName()
newObject.foobar = params["foobar"]
Ma Grails non sembra fare automaticamente la traduzione del campo foobar in un oggetto Date ().
Aggiornamento: Ulteriori informazioni possono essere trovate nel Grails JIRA .
Soluzione 2
Lettura del g: valore di datepicker è diventato molto più facile in Grails 1.2 (vedi le note di rilascio ):
Meglio Data l'analisi
Se si invia una data da un etichetta, ottenendo l'oggetto Date è ora come semplice come guardare in su dal oggetto params per nome (es. params.foo )
Altri suggerimenti
Utilizza il idioma. Nel caso del tuo esempio, io supporre che il modulo chiama il handleDate
azione. All'interno del controller:
def handleDate = { FoobarDateCommand dateCommand ->
def theNextDay = dateCommand.foobar + 1
}
Ecco FoobarDateCommand
. Notate come è il nome del campo lo stesso che nella vista:
class FoobarDateCommand {
Date foobar
}
oggetti Command sono un modo pratico per incapsulare tutte le attività di validazione per ciascuno dei moduli, mantenendo i controller bello e piccole.
Quando un param dice di essere un "struct", questo significa che ci sono un certo numero di params per rappresentare il suo valore. Nel tuo caso, ci sono:
- params [ "foobar_year" anno memorizzazione
- params [ "foobar_month"] mese memorizzazione
- params [ "foobar_day"] giorno memorizzazione
Basta prenderli fuori e fare quello che vuoi:)
È ancora bisogno di sapere se il formato
def newObject = new SomeClassName()
newObject.foobar = Date.parse('yyyy-MM-dd', params.foobar)