Erro em conversão automática de Data - VRaptor [Resolvido]

4 respostas
N

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!

4 Respostas

N
Encontrei a solução, segue abaixo o código que utilizei:
@Convert(Date.class)
@ApplicationScoped
public class DateConverterHelper implements Converter<Date> {

	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));
		}
	}

}
Obrigado!
guigasbody

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!

Lucas_Cavalcanti

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.

guigasbody

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!

Criado 11 de março de 2011
Ultima resposta 19 de fev. de 2014
Respostas 4
Participantes 3