Boa tarde,
Tenho um formulário a qual o usuário preenche a data no formato “dd/mm/yyyy” e ao submitar o formulário o VRaptor automaticamente popula o objeto “Controle” com o atributo do tipo “Date”.
O problema acontece quando o usuário preenche uma data inválida por exemplo “35/35/9999” o VRaptor converte automaticamente para uma data válida: “Thu Dec 05 00:00:00 BRST 2013” (05/12/2013), e na validação do sistema esse dado e tratado como válido.
@Temporal(TemporalType.DATE )
private Date data;
Como posso fazer para resolver essa conversão para validar a data corretamente?
Agradeço qualquer ajuda,
Obrigado!
Encontrei a solução, segue abaixo o código que utilizei:
[code]@Convert(Date.class)
@ApplicationScoped
public class DateConverterHelper implements Converter {
public Date convert(String value, Class<? extends Date> type, ResourceBundle bundle) {
if (value == null || value.equals("")) {
return null;
}
try {
DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
format.setLenient(false);
return (Date) format.parse(value);
} catch (ParseException e) {
throw new ConversionError(MessageFormat.format(bundle.getString("data.invalida"), value));
}
}
}[/code]Obrigado!
Olá a todos.
Estou utilizando o VRAPTOR, neste caso, como conseguiria capturar os erros no Validator em tempo de Conversão, é possível isso?
Este Converter gera uma exception e consequentemente a data chega nula no controller, eu precisaria que retornasse algo parecido com:
try {
DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
format.setLenient(false);
return format.parse(value);
} catch (ParseException e) {
validator.add(new ValidationMessage(bundle.getString("data"), bundle.getString("message.invalid.date")));
throw new ConversionError(MessageFormat.format(bundle.getString("message.invalid.date"), value));
}
Coloquei o Converter como @RequestScoped para injetar o validator, mas o seguinte erro é gerado:
Obrigado!
vc só precisa do throw new ConversionError, ele já é adicionado automaticamente no validator.
e nesse caso, vc precisa ter a chamada validator.onErrorXXX no controller, como o erro está te falando.
Bom dia Lucas, obrigado pelo retorno.
Descobri o problema.
Estava usando uma classe que estendia Validator e não trazia nela os erros do Converter.
Quando mudei para o Validator do VRAPTOR funcionou perfeitamente.
Abraços!