Fala galera, estou desenvolvendo uma aplicação web, porém travei na hora de inserir usuário, faltando apenas isso para terminar o projeto e dar sequência em outros aprimoramentos, oque acontece é o seguinte, estou tentando inserir um usuário, o mesmo irá pertencer a um, ou mais grupos, e cada grupo tem suas permissões.
Ao fazer os testes estou percebendo que o controller está recebendo quase todas as informações que o usuário entra lá na view, faltando apenas a informação do grupo, que é inserido, porém não chega no controller, segue as classes em questão e as relacionadas, e o resultado do teste feito…
Classe Usuário
@Entity
public class Usuario implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long codigo;
private String email;
private String nome;
private String setor;
private String senha;
private Boolean ativo;
@Size(min=1, message="Informe pelo menos um grupo")
@ManyToMany
@JoinTable(name="usuario_grupo", joinColumns = @JoinColumn(name="codigo_usuario"),
inverseJoinColumns= @JoinColumn(name="codigo_grupo"))
private List<Grupo> grupos = new ArrayList<Grupo>();
...... métodos getters, setter, toString, hasCode, equals
Classe Grupo
@Entity
public class Grupo implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long codigo;
private String nome;
@ManyToMany
@JoinTable(name="grupo_permissao", joinColumns = @JoinColumn(name="codigo_grupo"),
inverseJoinColumns = @JoinColumn(name="codigo_permissao"))
private List<Permissao> permissoes = new ArrayList<Permissao>();
...... métodos getters, setter, hasCode, equals
Classe Permissão
@Entity
public class Permissao implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long codigo;
private String nome;
...... métodos getters, setter, hasCode, equals
Na view quando eu eu insiro os dados do usuário Nome, e-mail, senha, setor, ativo o usuário é salvo no banco de dados, gerando informação apenas na tabela Usuario, sem criar vínculos com outras tabelas.
Porém quando eu marco o checkbox do Grupo que ele pertence para ele ser Usuário ou Administrador, ou os dois juntos, ele não cadastra, e utilizando o método toString o Usuário para ver oque está chegando no controller pude ver que está chegando uma lista vazia, dessa forma…
Usuario [codigo=null, email=admin, nome=David Borelli, setor=CONTABILIDADE, senha=123, ativo=true, grupos=[]]
Segue o JSP da view…
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>AspConexões | Inserir usuário</title>
<link rel="stylesheet" href="${contextPath}/resources/css/bootstrap.min.css">
<link rel="stylesheet" href="${contextPath}/resources/css/index.css">
</head>
<body>
<c:url value="/" var="contextPath" />
<jsp:include page="/resources/templates/navbar.jsp" />
<div class="container">
<ol class="breadcrumb">
<li><a href="${contextPath}">Início</a></li>
<li><a href="${contextPath}">Cadastros</a></li>
<li class="active">Inserir usuário</li>
</ol>
<div class="page-header">
<h1>Inserir usuário</h1>
</div>
<form:form action="${s:mvcUrl('UC#gravar').build()}" method="post" commandName="usuario">
<div class="form-group">
<div class="col-sm-offset-2 com-sm-10">
<ul>
<c:forEach items="${erros}" var="msg">
<li class="erro">${msg}</li>
</c:forEach>
</ul>
</div>
</div>
<div class="row form-group">
<div class="col-sm-12">
<label for="nome" class="control-label">Nome</label>
<form:input path="nome" cssClass="form-control "/>
</div>
</div>
<div class="row form-group">
<div class="col-sm-5">
<label for="email" class="control-label">E-mail</label>
<form:input path="email" cssClass="form-control" autocomplete="false"/>
</div>
<div class="col-sm-5" >
<label class="control-label" for="senha">Senha</label>
<form:input type="password" path="senha" cssClass="form-control"
autocomplete="false"/>
</div>
</div>
<div class="row form-group">
<div class="col-sm-3">
<label for="setor" class="control-label">Setor</label>
<form:select path="setor" cssClass="form-control">
<option value="">Selecione o setor...</option>
<c:forEach items="${setores}" var="setor" >
<form:option value="${setor}" >${setor.descricao}</form:option>
</c:forEach>
</form:select>
</div>
</div>
<div class="row form-group">
<div class="radio col-sm-2">
<label><form:radiobutton path="ativo" name="ativo" id="ativo" value="true"
checked="checked" />Ativo</label>
<label><form:radiobutton path="ativo" name="ativo" id="inativo" value="false"
/>Inativo</label>
</div>
</div>
<div class="row">
<div class="form-group col-sm-6">
<label class="control-label">Grupos</label>
<div>
<c:forEach items="${pgrupos}" var="grupoFe" varStatus="status">
<form:checkbox path="grupos" id="grupo_${status.index}"
value="${grupoFe.codigo}"></form:checkbox>
<label for="grupo_${status.index}">${grupoFe.nome}</label>
</c:forEach>
</div>
</div>
</div>
<footer class="row rodape">
<div class="col-sm-6">
<button class="btn btn-primary" type="submit">Salvar</button>
<a href="${contextPath}" class="btn btn-default">Voltar</a>
</div>
</footer>
</form:form>
</div>
<script src="<%=request.getContextPath()%>/resources/js/jquery-1.12.3.min.js"></script>
<script src="<%=request.getContextPath()%>/resources/js/bootstrap.min.js"></script>
<script src="<%=request.getContextPath()%>/resources/js/main.js"></script>
</body>
</html>
Segue o UsuarioController
@Controller
@RequestMapping("/usuarios")
public class UsuarioController {
@Autowired
private UsuarioDAO usuarioDao;
@Autowired
private GrupoDAO grupoDao;
@RequestMapping("/cadastro")
public ModelAndView cadastrar(Usuario usuario) {
ModelAndView modelAndView = new ModelAndView("/usuarios/inserirUsuarios");
modelAndView.addObject("setores", Setor.values());
modelAndView.addObject("pgrupos", grupoDao.buscarTodos());
return modelAndView;
}
@RequestMapping(method=RequestMethod.POST)
public ModelAndView gravar(Usuario usuario, BindingResult result, RedirectAttributes attributes) {
if(result.hasErrors()) {
System.out.println(usuario);
return cadastrar(usuario);
}
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>> Passou do erro");
System.out.println(usuario);
usuarioDao.salvar(usuario);
return new ModelAndView("redirect:/usuarios/cadastro");
}
}
Sei que o post ficou meio extenso mas espero ter conseguido passar todas as informação necessárias para que me ajudem resolver esse problema, e conseguir salvar esse bendito usuário no banco com seus respectivos grupos.