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!