Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro no projeto de formação.

Bom dia, estou fazendo o projeto final da formação Java e estou com problema na etapa 4, na hora de carregar os dados do usuário para alterar as permissões dele, tudo começa na table que tem a listagem de usuários:

<table class="table table-bordered table-striped table-hover">
    <tr>
        <th>Nome</th>
        <th>E-mail</th>
        <th>Roles</th>
        <th></th>
    </tr>

    <c:forEach items="${usuarios}" var="usuario">
    <tr>
        <td>${usuario.nome}</td>
        <td>${usuario.email}</td>
        <td>${usuario.roles}</td>
        <td><a href="${s:mvcUrl('UC#permissoes').arg(0, usuario.email).build()}"><img src="images/add.png"></a></td>
        </tr>
    </c:forEach>
</table>

Ao clicar para ir nas permissões do usuário, vai para o controller:

@RequestMapping(value = "/detalhe/{email}")
public ModelAndView permissoes(@PathVariable("email") String email) {
    Usuario usuario = repository.findByEmail(email);
    ModelAndView modelAndView = new ModelAndView("/usuarios/roles");
    modelAndView.addObject("usuario", usuario);
    return modelAndView;
}

Porém acontece o seguinte erro:

2018-08-10 04:48:33.858  WARN 7868 --- [nio-8080-exec-6] .m.m.a.ExceptionHandlerExceptionResolver : Resolved exception caused by Handler execution: java.lang.IllegalStateException: Invalid target for Validator [br.com.casadocodigo.validator.UsuarioValidation@26f884f7]: br.com.casadocodigo.models.Usuario@4ff42abd
Hibernate: select usuario0_.email as email1_3_, usuario0_.nome as nome2_3_, usuario0_.senha as senha3_3_ from usuario usuario0_ where usuario0_.email=?
Hibernate: select roles0_.usuario_email as usuario_1_4_0_, roles0_.roles_nome as roles_no2_4_0_, role1_.nome as nome1_2_1_ from usuario_roles roles0_ inner join role role1_ on roles0_.roles_nome=role1_.nome where roles0_.usuario_email=?
java.lang.IllegalStateException: Invalid target for Validator [br.com.casadocodigo.validator.UsuarioValidation@3fffe13e]: br.com.casadocodigo.models.Usuario@45158eb2
    at org.springframework.validation.DataBinder.assertValidators(DataBinder.java:541)
    at org.springframework.validation.DataBinder.setValidator(DataBinder.java:530)
    at br.com.casadocodigo.controllers.UsuarioController.InitBinder(UsuarioController.java:39)

Ele indica que o erro aconteceu na linha 39, que é da parte que eu declaro o validator:

@InitBinder
public void InitBinder(WebDataBinder binder) {
    binder.setValidator(new UsuarioValidation());
}

Gostaria de saber o porque desse erro?, já que a validação não é utilizada para a classe Usuario.

Obrigado!

1 resposta
solução!

Problema resolvido, tenho que indicar na anotação do init binder que quero apenas o Objeto UsuarioCadastro que deverá ser validado, ou ele vai tentar validar todos.

@InitBinder("usuarioCadastro")
public void InitBinder(WebDataBinder binder) {
    binder.setValidator(new UsuarioValidation());
}