Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Recuperando email do usuário logado e não do usuário relacionado

Como assim? Bom, primeiro de tudo, olá =)

Tenho a tabela que lista os usuários, implementada na funcionalidade 3. Adicionei os campos pedidos para a funcionalidade 4 e um deles é um botão para adicionar para a página de edição de roles. Eu consigo ir para a página de roles (inclusive, tenho outro problema lá, como descrito aqui). Meu problema é: quando eu chamo o nome do usuário na página de edição de roles, quem aparece é o Admin, independente de qual usuário eu tenha chamado pelo botão de edição. Eu sei que os dados que estão sendo enviados estão corretos, afinal o email que aparece na URL é o correto e quando eu tento imprimir no console, aparece os valores corretos também.

  @RequestMapping(value = "/editar", method = RequestMethod.POST)
  public ModelAndView editarForm(@RequestParam String email) {
    ModelAndView mav = new ModelAndView("/usuarios/editar");

    Usuario usuario = usuarioDao.loadUserByUsername(email);
    mav.addObject("usuario", usuario);
    mav.addObject("roles", usuario.getRoles());

    List<Role> listaRoles = roleDao.listar();
    mav.addObject("listaRoles", listaRoles);

    return mav;
  }
              <form:form action="${s:mvcUrl('UC#editarForm').arg(0, usuario.email).build() }" method="POST">
                <input type="image" src="${resPath}/imagens/editar.png" alt="Editar" title="Editar"/>
              </form:form>

Como é possível ver, na classe UsuarioController, eu atribuo os parâmetros aos nomes corretamente e devolvo o objeto ModelAndView para que eu consiga recuperar esses dados depois.

Mas quando eu chamo o ${usuario.nome} na página de edição dos roles, eu recupero o nome do Admin sempre. E esse é o de menos. Se eu tento mexer nos roles de um outro usuário, ele vai atualizar os roles do Admin também.

      <form:form servletRelativeAction="${s:mvcUrl('UC#atualizar').arg(0, usuario.email).arg(1, usuario.roles).build()}"
        method="POST" modelAttribute="usuario">
        <h1>Cadastro de Permissões para ${usuario.nome}</h1>
        <form:checkboxes items="${listaRoles}" path="roles"/>
        <br>
        <button type="submit">Atualizar</button>
      </form:form>

na URL da página de edição dos roles, aparece o email correto, como eu disse. Não estou entendendo o porquê da página acabar sempre puxando o Admin. Me parece que ele está recuperando apenas o usuário logado no sistema. O que eu estou deixando passar?

2 respostas
solução!

Descobri o que estava causando isso. A variável "usuario" já estava definida para Admin. Mudei a forma como eu definia para o usuário da vez, tanto na view quanto no meu controller e tudo resolvido.