Erro de data nula ao aplicar filtro e usar paginate
06/01/2011 00:00
0
Bom dia.

Estou com o seguinte problema e agradeço a quem possa me ajudar:

Tenho uma lista de clientes e coloquei, na página da lista, 2 calendários e um botão para filtrá-los pela data de cadastro.
Está funcionando corretamente: ao clicar no botão é chamada a action filtro no controller e os clientes cadastrados no período selecionado são exibidos.

O problema é que ao clicar no página seguinte (2,3,...Próximo) aparece o seguinte erro:
Error 500: Executing action [filtro] of controller [br.com.ClienteController] caused exception: java.text.ParseException: Unparseable date: "null"


Aqui está o código da action:

def filtro = {
params.max = Math.min(params.max ? params.int('max') : 10, 100)
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("dd/MM/yyyy")
Date dataInicio = (Date)formatter.parse("${params.dataInicio}")
Date dataFim = (Date)formatter.parse("${params.dataFim}")
render(view: "list", model: [clienteInstanceList: Cliente.findAllByDataCadastroBetween(dataInicio,dataFim,params), clienteInstanceTotal: Cliente.countByDataCadastroBetween(dataInicio,dataFim,params)])
}


O que pode estar ocorrendo ao clicar nas páginas seguintes do paginate?
Como posso resolver isto?
Tags: Grails


0
Acontece que quando vocÊ vai navegar na paginação.
O filtro não recebe novamente as datas filtradas, e como os parâmetros de datainicio e datafim estão nulos dá erro no parse do dateFormat.

eu acredito que as datas de filtro nao estao no mesmo form que é submetido quando vc navega na paginação. se você adicionar os parametros e validar as datas antes de tentar fazer o parse vai resolver o problema.
06/01/2011 00:00


0
Olá igorhara.
Obrigado pela resposta.

A causa do problema parece ser esta mesmo que você citou: o form de submissão do período está fora do paginate.

Se eu passo a data (no formato americano) diretamente, ele funciona:
render(view: "list", model: [clienteInstanceList: Cliente.findAllByDataCadastroBetween('12/31/2010','01/05/2011',params), clienteInstanceTotal: Cliente.countByDataCadastroBetween('12/31/2010','01/05/2011',params)])


Só não entendi como implementar sua solução:
"adicionar os parametros e validar as datas antes de tentar fazer o parse" ??

Se não fizer o parser antes eu não consigo transformar as datas para o formato americano, que será utilizado na lista gerado pelo filtro.
Caso possa colocar algum exemplo, com base no código que postei, ficarei agradecido.
06/01/2011 00:00



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto