Boa Noite gente…
Seguinte…eu to estudando JSF e para praticar estava fazendo um CRUD simples…até ai sem problemas…mas quando eu tentei usar um filtro com o padrão Open Session in View para eu recuperar um EntityManager no meu ManagedBean junto com a anotação @ManagedProperty, a pagina não carrega mais e mostra o seguinte erro:
javax.servlet.ServletException: Não foi possível criar o bean gerenciado usuarioMB. Os seguintes problemas foram encontrados:
- A propriedade manager para o bean gerenciado usuarioMB não existe.
Aqui está meu ManagedBean e o Filtro:
package managedbeans;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import model.Usuario;
@ManagedBean
public class UsuarioMB {
@ManagedProperty(value="#{entityManager}")
private EntityManager manager;
private Usuario usuario;
public UsuarioMB() {
this.usuario = new Usuario();
}
public void adiciona() {
if (usuario.getId() == null)
manager.persist(this.usuario);
else
manager.merge(this.usuario);
manager.flush();
this.usuario = new Usuario();
}
public void alterar(Usuario usuario) {
this.usuario = manager.find(Usuario.class, usuario.getId());
}
public void remove(Usuario usuario) {
manager.remove(usuario);
manager.flush();
}
public List<Usuario> getUsuarios() {
TypedQuery<Usuario> query = manager.createQuery("SELECT u FROM Usuario as u", Usuario.class);
return query.getResultList();
}
public Usuario getUsuario() {
return usuario;
}
}
package filtros;
import java.io.IOException;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
@WebFilter(servletNames={"Faces Servlet"})
public class FiltroJPA implements Filter {
private EntityManagerFactory factory;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.factory = Persistence.createEntityManagerFactory("cadastro");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
EntityManager manager = this.factory.createEntityManager();
request.setAttribute("entityManager", manager);
manager.getTransaction().begin();
chain.doFilter(request, response);
try {
manager.getTransaction().commit();
} catch (Exception e) {
manager.getTransaction().rollback();
} finally {
manager.close();
}
}
@Override
public void destroy() {
this.factory.close();
}
}
Se puderem ajudar eu agradeço…
Abraços