Aqui está meu código :
UsuarioController:
@Controller
public class UsuarioController {
private UsuarioDao usuarioDao;
private Result result;
private Validator validator;
@Inject
public UsuarioController(UsuarioDao usuarioDao , Result result, Validator validator) {
this.usuarioDao = usuarioDao;
this.result = result;
this.validator = validator;
}
public UsuarioController(){}
@Path("usuarios/lista")
public void lista() {
List<Usuario> usuarios = usuarioDao.lista();
result.include("tipoUsuario", TipoUsuario.values());
result.include("usuarios",usuarios);
}
@Path("/usuarios/novo")
public void novo() {
result.include("tipoUsuario", TipoUsuario.values());
}
@IncludeParameters
public void adiciona(@Valid Usuario usuario) {
validator.onErrorRedirectTo(this).novo();
usuarioDao.adiciona(usuario);
result.redirectTo(this).lista();
}
UsuarioDao:
@RequestScoped
public class UsuarioDao {
private EntityManager manager;
@Inject
public UsuarioDao (EntityManager manager){
this.manager = manager;
}
public UsuarioDao(){}
public void adiciona(Usuario usuario) {
try {
manager.getTransaction().begin();
manager.persist(usuario);
manager.getTransaction().commit();
}catch (Exception e) {
manager.getTransaction().rollback();
}
}
public List<Usuario> lista() {
try{
TypedQuery<Usuario> query = manager.createQuery("select u from Usuario u", Usuario.class);
return query.getResultList();
}finally{
manager.close();
}
}
Form de cadastro:
<form class="form-style" action="${linkTo[UsuarioController].adiciona(null)}" method="post">
<label for="nome">Nome do usuário:</label>
<input type="text" name="usuario.nome" id="nome" class="form-control" placeholder="Nome Completo" value="${usuario.nome}" required/>
<label for="email">Email:</label>
<input type="text" name="usuario.email" id="email" class="form-control" placeholder="Seu endereço de email" value="${usuario.email}" required/>
...
<input type="submit" class="btn btn-red" value="Cadastrar Usuário" />
</form>
Lista:
<table class="table" id="tabela">
<thead>
...
</thead>
<tbody class="usuario-body">
<c:forEach items="${usuarios}" var="usuario">
<tr class="usuario">
<td id="id">${usuario.id}</td>
<td id="nome">${usuario.nome}</td>
<td id="email">${usuario.email}</td>
<td id="login">${usuario.login}</td>
<td id="tipo">${usuario.tipo}</td>
<td class="tdedita">
<a href="<c:url value='/usuarios/${usuario.id}'/>">Editar</a>
<a href="javascript:;" class="deletarProduto" data-href="<c:url value='/usuario/remove?usuario.id=${usuario.id}'/>" >Deletar</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
OBS.: O problema está na tabela, a cada refresh ela some e volta com o usuário cadastrado, o problema ocorre em todas as tabelas do meu projeto.