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 .

Foi útil?

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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top