[RESOLVIDO] VRaptor 3 - Problema com data vindo no form

6 respostas
P

Pessoal

Estou utilizando o VRaptor3 em uma aplicação.

Para Javascript uso o JQuery.

Tenho um campo data, onde uso o JQuery UI Calendar, e seleciono a data.

Independente disso, no campo fica a data no formato dd/mm/aaaa (ex: 25/03/2010)

O name do input é pessoa.dataNascimento, para que seja colocada essa data no atributo dataNascimento da pessoa.

O problema ta que, se eu coloco a data como 25/03/2010, ele salva no banco como 03/01/2012.

Eu to mandando dd/mm/aaaa e ele ta lendo mm/dd/aaaa.

Tem como resolver isso? Se faço o Locale.getDefaultLocale ja ta vindo pt_BR

A unica coisa que pensei seria ter um metodo setDataString, e o name do input ser pessoa.dataString, e neste Set tratar essa diferença. Mas como o sistema utilizará datas em diversos pontos, além de ser uma solução burra, daria um baita trabalho, que axo q deve ter uma solução mais simples.

Obrigado a todos que puderem ajudar.

Abraços

6 Respostas

Lucas_Cavalcanti

você pode criar um converter para Calendar (ou pra Date dependendo do que vc estiver usando):

@Converts(Calendar.class)
public class CalendarConverter implements Converter<Calendar> {
   
    public Calendar convert(String value, ....) {
         //checa null ou empty
         return new SimpleDateFormat("dd/MM/yyyy").parse(value);
    }

}
P

Eu estou usando Date.

Me pareceu legal essa solução do converter… mas nem imagino como aplicá-la.

Vou dar uma pesquisada, mas se puder me adiantar alguma coisa, agradeço.

Abs

P

Cara

Vou tentar entender como isso funciona, mas eu simplesmente escrevi a seguinte classe e ta funcionando:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.ResourceBundle;

import br.com.caelum.vraptor.Convert;
import br.com.caelum.vraptor.Converter;

@Convert(Date.class)
public class DateConverter implements Converter&lt;Date&gt; {

	@Override
	public Date convert(String value, Class&lt;? extends Date&gt; arg1, ResourceBundle arg2) {
		// TODO Auto-generated method stub
		try {
			return new SimpleDateFormat("dd/MM/yyyy").parse(value);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}

}

Obrigado pela ajuda.

Abraço

Lucas_Cavalcanti

é assim mesmo… vc cria a classe e o VRaptor acha ela e usa pra converter as coisas :wink:

J

Só pra registrar; tive um problema parecido, e acabou dando certo fazendo de outra forma.

<label for="dataNascimento">Data de Nascimento:</label>
<input id="dataNascimento" name="pessoa.dataNascimento" type="text">
<script type="text/javascript"> 				
$("#dataNascimento").datepicker({dateFormat: 'dd/mm/yy',
  changeMonth: true,
  changeYear: true	
});				
</script>
renatoargh

Se a aplicação for localizada acho que a resposta do Lucas ta meio “hardcode”. Uma maneira de flexibilizar o formato da data, pode ser pegar essa string do locale. Achei esse post que ensina como fazer isso:

Criado 25 de março de 2010
Ultima resposta 25 de abr. de 2012
Respostas 6
Participantes 4