La lectura de la g: DatePicker-valor en Grails sin utilizar el “new Object (params)” - método
-
22-08-2019 - |
Pregunta
Vamos a decir que tengo un planificador de evento llamado "foobar":
<g:datePicker name="foobar" value="${new Date()}" precision="day" />
¿Cómo se lee el valor presentado de este selector de fecha?
Una forma que funciona, pero tiene algunos efectos secundarios no deseados es la siguiente:
def newObject = new SomeClassName(params)
println "value=" + newObject.foobar
Esta forma de hacer que lee todos los campos presentados en newObject que es algo que quiero evitar. Sólo estoy interesado en el valor del campo "foobar".
La forma en que la prevista inicialmente esto se podría hacer era:
def newObject = new SomeClassName()
newObject.foobar = params["foobar"]
Pero Griales no parece hacerlo automáticamente la traducción del campo foobar en un objeto Date ().
Actualización: Información adicional se puede encontrar en el Grails JIRA .
Solución 2
La lectura de la G: valor DatePicker se convirtió en mucho más fácil en Grails 1.2 (ver notas de la versión ):
Mejor Fecha de análisis
Si envía una fecha a partir de una etiqueta, la obtención del objeto Date es ahora tan simple como mirar hacia arriba desde la params objeto por su nombre (por ejemplo. params.foo )
Otros consejos
Utilice el comando idioma. En el caso de tu ejemplo, asumiré que el formulario llama a la acción handleDate
. En el interior del controlador:
def handleDate = { FoobarDateCommand dateCommand ->
def theNextDay = dateCommand.foobar + 1
}
A continuación se FoobarDateCommand
. Observe cómo se nombra el campo lo mismo que en la vista:
class FoobarDateCommand {
Date foobar
}
Los objetos de órdenes son una forma práctica para encapsular todas las tareas de validación para cada una de sus formas, manteniendo los controladores agradable y pequeña.
Cuando un parámetro dice ser una "estructura", esto significa que hay una serie de parametros para representar su valor. En su caso, se encuentran:
- params [ "foobar_year" año almacenamiento
- params [ "foobar_month"] almacenar meses
- params [ "foobar_day"] almacenar días
Sólo Apunte a ellos y hacer lo que quiere:)
Todavía es necesario conocer el formato aunque
def newObject = new SomeClassName()
newObject.foobar = Date.parse('yyyy-MM-dd', params.foobar)