Fórum Validador customizado, utilizando um service #498636
21/10/2014
0
Minha idéia é a seguinte, no servicoUsuario tenho um método "getUsuarioPorLogin", e estou tentando fazer uma verificação onde através do login passado no cadastro ele utiliza esse método, caso seja retornado um valor NULL deixo o método de validação isValid como true, caso contrário false.
Porém algo de errado está acontecendo, abaixo vai o código da classe do validador customizado:
public class LoginPadraoValidator implements
ConstraintValidator<LoginPadrao, String> {
private ServicoUsuario servicoUsuario;
@Override
public void initialize(LoginPadrao constraintAnnotation) {
constraintAnnotation.message();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context){
try{
return(servicoUsuario.getUsuarioPorLogin(value).equals(null));
}
catch(NullPointerException ex){
System.out.println("ok, nulo então não existe nenhum usuario com esse login certo?!?!?");
return true;
}
}
}O que está acontecendo é que ele sempre "cai" no catch mesmo colocando um login já existente, alguma luz? isso é possível ou estou indo pelo caminho errado?
Valeu, até mais!
Leia mais em: Validadores Personalizados no Cadastro de Usuários - Curso de Java EE: Construa uma aplicação completa Java EE - Aula 40 https://www.devmedia.com.br/validadores-personalizados-no-cadastro-de-usuarios-curso-de-java-ee-construa-uma-aplicacao-completa-java-ee-aula-40/30961#ixzz3GohmDWTt
Bruno Santana
Curtir tópico
+ 0Posts
21/10/2014
Ronaldo Lanhellas
Gostei + 0
21/10/2014
Bruno Santana
Obs, meu serviço é um EJB...
Valeu pela força Ronaldo!!!
Gostei + 0
22/10/2014
Ronaldo Lanhellas
Gostei + 0
22/10/2014
Bruno Santana
Acabei "resolvendo" o problema de outra maneira, apliquei essa verificação dentro do próprio serviço na chamada do método em questão. O código do serviço ficou da seguinte forma
@Stateless
@LocalBean
@TransactionAttribute(TransactionAttributeType.REQUIRED)
@TransactionManagement(TransactionManagementType.CONTAINER)
public class ServicoUsuario extends ServicoBasico {
public Usuario addUsuario(Usuario usuario) throws LoginPadraoException{
if(repositorioUsuario.getUsuarioPorLogin(usuario.getUsuLogin()) != null){
throw new LoginPadraoException();
}
return repositorioUsuario.addUsuario(usuario);
}
Não sei se essa foi a forma mais elegante, mas consegui realizar a verificação de login (tratando algumas exceções que foram chamadas durante a verificação pois o mesmo retornava um objeto NULL) fazendo da forma acima. A "bad" é que a verificação é feita apenas no final do cadastro do usuário, diferente caso fosse feita através de um validador customizado e utilizado diretamente na entidade(como no primeiro post)... a mensagem de "LOGIN JA EXISTENTE" apareceria logo ao "setar" o campo usuLogin... Então é isso Ronaldo? não há maneira de injetar um serviço (EJB) como esse "ServicoUsuario" dentro de um validador customizado (citado no primeiro post) sem a utilização de factory?!??! Caso não, vou tentar deixar essa soluçao para depois, não consegui entender esses códigos auhauahuahuahuah õ.o ://
Gostei + 0
23/10/2014
Ronaldo Lanhellas
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)