Bom dia. Minha dificuldade está em comparar se o e-mail digitado no formulário já existe no banco de dados.
Vou postar as classes relativas
Classe UsuarioValidation
package br.com.casadocodigo.loja.validation;
//imports
public class UsuarioValidation implements Validator {
@Autowired
private UsuarioDAO dao;
@Override
public boolean supports(Class<?> clazz) {
return Usuario.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmpty(errors, "nome", "field.required");
ValidationUtils.rejectIfEmpty(errors, "email", "field.required");
ValidationUtils.rejectIfEmpty(errors, "senha", "field.required");
Usuario usuario = (Usuario) target;
String senha = usuario.getSenha();
String senha2 = usuario.getSenha2();
String email = usuario.getUsername();
if (dao.emailExiste(email)) {
System.out.println("E-mail já existe");
} else if (!senha.equals(senha2) && !senha.isEmpty()) {
errors.rejectValue("senha", "field.required.usuario.senha.confere");
} else if (senha.length() <= 4 && !senha.isEmpty()) {
errors.rejectValue("senha", "typeMismatch.usuario.senha");
}
}
}
Classe UsuarioDAO
package br.com.casadocodigo.loja.dao;
//imports
@Repository
@Transactional
public class UsuarioDAO implements UserDetailsService {
@PersistenceContext
private EntityManager manager;
public boolean emailExiste(String email) {
List<Usuario> usuarios = manager.createQuery("select u from Usuario u where email = :email", Usuario.class)
.setParameter("email", email).getResultList();
if (!usuarios.isEmpty()) {
return true;
} else
return false;
}
E a UsuarioController
package br.com.casadocodigo.loja.controllers;
//imports
@Controller
@RequestMapping("/usuarios")
public class UsuarioController {
@Autowired
private UsuarioDAO dao;
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.addValidators(new UsuarioValidation());
}
@RequestMapping(value = "/form", method = RequestMethod.POST)
@Transactional
public ModelAndView grava(@Valid Usuario usuario, BindingResult result, RedirectAttributes redirectAttributes) {
if (result.hasErrors()) {
return form(usuario);
}
dao.gravar(usuario);
redirectAttributes.addFlashAttribute("message", "Usuário " + usuario.getNome() + " cadastrado com sucesso!");
return new ModelAndView("redirect:/usuarios");
}
Da forma que está agora está dando NullPointerException
java.lang.NullPointerException
at br.com.casadocodigo.loja.validation.UsuarioValidation.validate(UsuarioValidation.java:36)
at org.springframework.validation.DataBinder.validate(DataBinder.java:895)
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.validateIfApplicable(ModelAttributeMethodProcessor.java:166)
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:113)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)
...
Retirando o método emailExiste()
volta a funcionar normalmente (sem a verificação de e-mail obviamente).