Leyendo g: datePicker-value en Grails sin usar el "nuevo Object(params)"-método
gsp taglib (4)
Aún necesita saber el formato, aunque
def newObject = new SomeClassName()
newObject.foobar = Date.parse(''yyyy-MM-dd'', params.foobar)
Digamos que tengo un datePicker llamado "foobar":
<g:datePicker name="foobar" value="${new Date()}" precision="day" />
¿Cómo leo el valor enviado 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 hacerlo lee todos los campos enviados a newObject, que es algo que quiero evitar. Solo me interesa el valor del campo "foobar".
La forma en que originalmente asumí que esto podría hacerse fue:
def newObject = new SomeClassName()
newObject.foobar = params["foobar"]
Pero Grails no parece hacer automáticamente la traducción del campo foobar en un objeto Date ().
Actualizado: se puede encontrar información adicional en Grails JIRA .
Cuando un param dice que es una "estructura", esto significa que hay una serie de parámetros para representar su valor. En tu caso, hay:
- params [año de almacenamiento "foobar_year"]
- params ["foobar_month"] mes de almacenamiento
- params ["foobar_day"] día de almacenamiento
Solo tráelos y haz lo que quieras :)
Use el comando objeto idiom. En el caso de su ejemplo, handleDate
que su formulario llama a la acción handleDate
. Dentro del controlador:
def handleDate = { FoobarDateCommand dateCommand ->
def theNextDay = dateCommand.foobar + 1
}
Aquí está FoobarDateCommand
. Observe cómo nombra el campo igual que en la vista:
class FoobarDateCommand {
Date foobar
}
Los objetos de comando son una forma práctica de encapsular todas las tareas de validación para cada uno de sus formularios, manteniendo sus controladores agradables y pequeños.
Leer el valor de g: datePicker se volvió mucho más fácil en Grails 1.2 (ver notas de la versión ):
Mejor análisis de la fecha
Si envía una fecha desde una etiqueta, obtener el objeto Fecha ahora es tan simple como buscarlo desde el objeto params por su nombre (por ejemplo, params.foo)