Leggendo il g: datepicker qualità-prezzo in Grails senza utilizzare il “new Object (params)” - Metodo

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

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

È stato utile?

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top