Lendo o g: datePicker valor em Grails sem usar o “new Object (params)” - método
-
22-08-2019 - |
Pergunta
Vamos dizer que tenho um datePicker chamado "foobar":
<g:datePicker name="foobar" value="${new Date()}" precision="day" />
Como faço para ler o valor apresentado nesta data-picker?
Uma maneira que funciona, mas tem alguns efeitos colaterais indesejados é o seguinte:
def newObject = new SomeClassName(params)
println "value=" + newObject.foobar
Esta maneira de fazer ele lê todos os campos apresentados em newObject que é algo que queremos evitar. Eu só estou interessado no valor do campo "foobar".
A maneira que eu inicialmente previsto isso poderia ser feito era:
def newObject = new SomeClassName()
newObject.foobar = params["foobar"]
Mas Grails não parece fazer automaticamente a tradução do campo foobar em um objeto Date ().
Atualizado: Informações adicionais podem ser encontradas no Grails JIRA .
Solução 2
A leitura do g: Valor datePicker tornou-se muito mais fácil em Grails 1.2 (veja notas de versão ):
Melhor Data parsing
Se você enviar uma data a partir de um tag, a obtenção do objeto Date é agora tão simples como olhar-lo a partir do params objeto pelo nome (por exemplo. params.foo )
Outras dicas
Use a comando idioma objeto . No caso do seu exemplo, vou assumir que o seu formulário chama o handleDate
ação. Dentro do controlador:
def handleDate = { FoobarDateCommand dateCommand ->
def theNextDay = dateCommand.foobar + 1
}
Aqui está FoobarDateCommand
. Observe como o nome do campo o mesmo que no modo de exibição:
class FoobarDateCommand {
Date foobar
}
objetos de comando são uma maneira prática para encapsular todas as tarefas de validação para cada uma de suas formas, mantendo a sua controladores simpático e pequeno.
Quando um param diz ser um "struct", isso significa que há uma série de parâmetros para representar o seu valor. No seu caso, existem:
- params [ "foobar_year" No ano armazenar
- params [ "foobar_month"] armazenar mês
- params [ "foobar_day"] armazenar dia
Apenas buscá-los fora e fazer o que quiser:)
Você ainda precisa saber o formato embora
def newObject = new SomeClassName()
newObject.foobar = Date.parse('yyyy-MM-dd', params.foobar)