Joda Time é uma maravilhosa biblioteca de manipulação de datas e horas. O objetivo é resolver os problemas introduzidos pela API padrão de datas do Java.
O VRaptor já tem prontos para uso quatro conversores para classes da Joda Time comumente utilizadas em aplicações WEB:
Os conversores se baseiam no Locale atual do usuário. Este Locale define o formato de entrada dos dados, assim como nos conversores LocaleCalendarDateConverter e LocaleCalendarTimeConverter.
Os dados de entrada devem ser sempre no formato curto: DateFormat.SHORT. Exemplo: dd/MM/aaaa e hh:mm para Locale pt_BR.
Basta abilitar aqueles que serão usados no arquivo de configuração vraptor.xml:
<vraptor> <converter>org.vraptor.converter.joda.LocalDateConverter</converter> <converter>org.vraptor.converter.joda.LocalTimeConverter</converter> <!-- Os antigos agora estão depreciados --> <converter>org.vraptor.converter.joda.YearMonthDayConverter</converter> <converter>org.vraptor.converter.joda.TimeOfDayConverter</converter> </vraptor>
Caso você precise de uma data (lembrando que não é timestamp), pode usar o parâmetro do método para ler os dados enviados na requisição:
package org.vraptor.example.joda.time; import org.joda.time.LocalDate; import org.vraptor.annotations.Component; import org.vraptor.annotations.Parameter; @Component("myComponent") public class MyComponent { private LocalDate date; public void method(LocalDate date) { System.out.println("Date: " + date); this.date = date; } public LocalDate getDate() { return this.date; } }
Pronto! Basta apontar para http://domain.com/context/myComponent.method.logic?date=1/1/1970 e o atributo com a data será automaticamente preenchido!
Para receber um horário fornecido pelo usuário, basta novamente ler o parâmetro da requisição usando parâmetro do método:
package org.vraptor.example.joda.time; import org.joda.time.LocalTime; import org.vraptor.annotations.Component; import org.vraptor.annotations.Parameter; @Component("myComponent") public class MyComponent { private LocalTime time; public void method(LocalTime time) { System.out.println("Time: " + time); this.time = time; } public LocalTime getTime() { return this.time; } }
Pronto! Novamente aponte para http://domain.com/context/myComponent.method.logic?time=11:30 e o atributo com o horário será automaticamente preenchido!