Tentei me controlar, mas não deu… isso é o tipo de padrão que nunca deve ser usado.
O método só retorna true ou false. Se der um erro você simplesmente volta para a tela anterior dizendo “Ocorreu um erro”, é? O feedback ao usuário é muito importante, e jamais deve ser omitido onde estão os erros. Como vou saber se o erro é email inválido, telefone sem DDD ou se o nome está vazio?
Na documentação do vraptor há bons exemplos de como fazer uma validação decente, inclusive usando o Bean Validation.
Nykolas_Lima
garcia-jj:
Tentei me controlar, mas não deu… isso é o tipo de padrão que nunca deve ser usado.
O método só retorna true ou false. Se der um erro você simplesmente volta para a tela anterior dizendo “Ocorreu um erro”, é? O feedback ao usuário é muito importante, e jamais deve ser omitido onde estão os erros. Como vou saber se o erro é email inválido, telefone sem DDD ou se o nome está vazio?
Na documentação do vraptor há bons exemplos de como fazer uma validação decente, inclusive usando o Bean Validation.
E você faz sua validação onde?
wbdsjunior
discordo que o padrão nunca deve ser usado, mas o amigo garcia-jj tem razão quando diz que “o feedback ao usuário é muito importante” e o próprio autor do artigo dá a luz à sua dúvida:
eu usaria o Bean Validations do java mesmo ao invés de fazer esse trabalho todo para validações do modelo (nome não pode ser vazio, etc)…
agora para validações de negócio (só pode passar pra próxima fase se fez 500 pontos) faria sentido fazer esse Specification, e pra continuar a usar o VRaptor vc pode criar uma interface nova:
@ComponentpublicclassDefaultSpecValidatorimplementsSpecValidator{publicDefaultSpecValidator(Validatordelegate){this.delegate=delegate;}//no eclipse use ctrl+3 generate delegate methods e selecione tudopublic<T>voidcheck(Tobj,Specification<?superT>spec){delegate.checking(newValidations(){{that(spec.isSatisfiedBy(obj),"categoria","msg");}});}}
daí vc recebe esse validator no construtor.
Nykolas_Lima
Lucas Cavalcanti:
eu usaria o Bean Validations do java mesmo ao invés de fazer esse trabalho todo para validações do modelo (nome não pode ser vazio, etc)…
agora para validações de negócio (só pode passar pra próxima fase se fez 500 pontos) faria sentido fazer esse Specification, e pra continuar a usar o VRaptor vc pode criar uma interface nova:
@ComponentpublicclassDefaultSpecValidatorimplementsSpecValidator{publicDefaultSpecValidator(Validatordelegate){this.delegate=delegate;}//no eclipse use ctrl+3 generate delegate methods e selecione tudopublic<T>voidcheck(Tobj,Specification<?superT>spec){delegate.checking(newValidations(){{that(spec.isSatisfiedBy(obj),"categoria","msg");}});}}
daí vc recebe esse validator no construtor.
Eu estou fazendo a validação para adicionar dados dentro do meu próprio domínio.
Acabo amarrando o domínio ao VRaptor, pelo fato desde método de validação receber um Validator para adicionar os erros. Mas atualmente não acho que está validação é um problema.
Achei legal o esquema de Specification, mas não sei se valeria para todas as situações, principalmente as mais simples onde só são verificados dados de cadastros simples.
Lucas_Cavalcanti
esse specValidator é só pra vc criar um Validator bombado com a funcionalidade de Specifications, a idéia é substituir o do vraptor por isso.
em todo caso, acho que o Bean Validations resolve a maioria dos problemas