10
respostas

Erro nas classe modelo!

Olá, Nas minhas classes modelosAutor, LivroDataModel e Usuario (essa útima eu fiz para criar uma tela de cadastro) deu erro. Devo fazer o mesmo que eu fiz nas outras classes (beans e daos)?

Segue a classe Autor:

package br.com.caelum.livraria.modelo;

import java.io.Serializable;

import javax.faces.bean.ViewScoped;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import br.com.caelum.livraria.dao.DAO;

@Entity
@ViewScoped
public class Autor implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    private Integer id;
    private String nome;
    private String email;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public void remover(Autor autor) {
        new DAO<Autor>(Autor.class).remove(autor);  //aqui onde da o erro!
    }
}

Segue a classe LivroDataModelo :

package br.com.caelum.livraria.modelo;

import java.util.List;
import java.util.Map;

import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

import br.com.caelum.livraria.dao.DAO;

public class LivroDataModel extends LazyDataModel<Livro>{
    DAO<Livro> dao = new DAO<Livro>(Livro.class);

    public LivroDataModel() {
        super.setRowCount(dao.quantidadeDeElementos());
    }

    @Override
    public List<Livro> load(int inicio, int quantidade, String campoOrdenacao, SortOrder sentidoOrdenacao, Map<String, Object> filtros) {
        String titulo = (String) filtros.get("titulo");
        return dao.listaTodosPaginada(inicio, quantidade, "titulo", titulo);
    }

}

Segue a classe Usuário:

package br.com.caelum.livraria.modelo;

import java.io.Serializable;

import javax.faces.bean.ViewScoped;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import br.com.caelum.livraria.dao.DAO;

@Entity
@ViewScoped
public class Usuario implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    private Integer id;
    private String nome;
    private String senha;
    private String email;


    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public void remover(Usuario autor) {
        new DAO<Usuario>(Usuario.class).remove(autor);
    }

}

Help?

10 respostas
package br.com.caelum.livraria.modelo;

import java.io.Serializable;

import javax.faces.bean.ViewScoped; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id;

import br.com.caelum.livraria.dao.DAO;

@Entity @ViewScoped 
public class Autor implements Serializable {

/* */ private static final long serialVersionUID = 1L;

@Id @GeneratedValue 
private Integer id; 
private String nome; 
private String email;

public String getEmail() { 
return email; 
}

public void setEmail(String email) { 
this.email = email; 
}

public String getNome() { 
return nome; 
}

public void setNome(String nome) {
 this.nome = nome; 
}

public Integer getId() { 
return id; 
}

public void setId(Integer id) { 
this.id = id; 
}

public void remover(Autor autor) {
 new DAO(Autor.class).remove(autor); //aqui onde da o erro! }
 }
package br.com.caelum.livraria.modelo;

import java.util.List; import java.util.Map;

import org.primefaces.model.LazyDataModel; import org.primefaces.model.SortOrder;

import br.com.caelum.livraria.dao.DAO;

public class LivroDataModel extends LazyDataModel{ 
DAO dao = new DAO(Livro.class);

public LivroDataModel() {
 super.setRowCount(dao.quantidadeDeElementos());
 }

@Override 
public List load(int inicio, int quantidade, String campoOrdenacao, SortOrder sentidoOrdenacao, Map filtros) { 
String titulo = (String) filtros.get("titulo");
 return dao.listaTodosPaginada(inicio, quantidade, "titulo", titulo); }

}

Quando abrir uma duvida formata seu código porfavor kkk, qual o erro que você ta recebendo?

Uma coisa que eu vi no seu código,

@Entity @ViewScoped 
public class Autor implements Serializable {

Está usando a anotação ManagedBean aqui? Essa anotação deveria ser no seu bean, seria a durabilidade da sua página, aqui na classe autor só o entity já é necessario para JPA entender que irá persistir essa classe.

Seu erro está naquela linha, você tem o metodo remover na sua Classe Dao? Meu chute é esse kkk. Posta sua classe Dao.

Eduardo

estranho você usar o metodo remover no modelo. Eu acho que você deveria usar a responsabilidade de remover no bean, não é?

Se eu não me engano, vi o instrutor fazendo dessa forma, usando um método no modelo, posso estar enganado. Deixei as classes limpas, sem métodos ou anotações. Entretanto tem um erro que está me perseguindo.

Aug 03, 2017 1:15:24 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute
WARNING: #{loginBean.efetuaLogin}: java.lang.NullPointerException
javax.faces.FacesException: #{loginBean.efetuaLogin}: java.lang.NullPointerException
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    ... 27 more
Caused by: java.lang.NullPointerException
    at br.com.caelum.livraria.dao.UsuarioDao.existe(UsuarioDao.java:30)
    at br.com.caelum.livraria.bean.LoginBean.efetuaLogin(LoginBean.java:26)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:279)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    ... 28 more

Aug 03, 2017 1:15:24 PM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
SEVERE: javax.faces.el.EvaluationException: java.lang.NullPointerException
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
    at br.com.caelum.livraria.dao.UsuarioDao.existe(UsuarioDao.java:30)
    at br.com.caelum.livraria.bean.LoginBean.efetuaLogin(LoginBean.java:26)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:279)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    ... 28 more

Segue minha classe LoginBean:

package br.com.caelum.livraria.bean;

import java.io.Serializable;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.view.ViewScoped;
import javax.inject.Named;

import br.com.caelum.livraria.dao.UsuarioDao;
import br.com.caelum.livraria.modelo.Usuario;

@Named
@ViewScoped
public class LoginBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private Usuario usuario = new Usuario();

    public Usuario getUsuario() {
        return usuario;
    }

    public RedirectView efetuaLogin() {
        boolean existe = new UsuarioDao().existe(this.usuario);
        FacesContext context = FacesContext.getCurrentInstance();

        if (existe) {
            context.getExternalContext().getSessionMap().put("usuarioLogado", this.usuario);
            return new RedirectView("livro");
        }
        FacesContext.getCurrentInstance().addMessage("usuario", new FacesMessage("Usuário ou senha inválidos!"));
        return null;
    }

    public RedirectView deslogar() {
        FacesContext context = FacesContext.getCurrentInstance();
        context.getExternalContext().getSessionMap().remove("usuarioLogado");

        return new RedirectView("login");
    }
}

Segue minha classe UsuarioDao com o método existe:

package br.com.caelum.livraria.dao;

import java.io.Serializable;

import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.TypedQuery;

import br.com.caelum.livraria.modelo.Usuario;


@SuppressWarnings("serial")
public class UsuarioDao implements Serializable{

    @Inject
    EntityManager manager;

    private DAO<Usuario> usuarioDao;

    @PostConstruct
    void init() {
        this.usuarioDao = new DAO<Usuario>(this.manager, Usuario.class);
    }

    public boolean existe(Usuario usuario) {

        TypedQuery<Usuario> query = manager
                .createQuery("select u from Usuario u where u.email = :pEmail and u.senha = :pSenha", Usuario.class);//Erro nessa linha

        query.setParameter("pEmail", usuario.getEmail());
        query.setParameter("pSenha", usuario.getSenha());
        try {
            Usuario resultado = query.getSingleResult();

        } catch (NoResultException ex) {
            return false;
        }

        manager.close();
        return true;
    }

    public void adiciona(Usuario t) {
        usuarioDao.adiciona(t);
    }



}

Eduardo, vendo o seu código para o autorizador, não consegui ver erro nenhum, parace estár tudo certo, oque eu to vendo e no seu método.


  public RedirectView efetuaLogin() {
        boolean existe = new UsuarioDao().existe(this.usuario);
        FacesContext context = FacesContext.getCurrentInstance();

        if (existe) {
            context.getExternalContext().getSessionMap().put("usuarioLogado", this.usuario);
            return new RedirectView("livro");
        }
        FacesContext.getCurrentInstance().addMessage("usuario", new FacesMessage("Usuário ou senha inválidos!"));
        return null;
    }

Tá vendo que tá retornando null, casa o usuario não existá no banco? o nullpointer tá vindo dai, tem certeza que você tá passando o email e a senha correta para logar?

Olá Alisson,

Sim, estou passando email e senha corretos. O que devo retornar no lugar desse null?

Eduardo eu to viajando aqui, achei que fosse isso, mais acho que o problema está em um outro lugar, vendo as linhas do erro o erro não bate ande te indiquei, cara olhando seu código está tudo correto, tenta acrescentar o setter no usuario na sua classe loguinBean.

public void setUsuario(Usuario usuario) {
    this.usuario = usuario;
}

Não funcionou.

Por curiosidade posta o seu xhtml do loguin

Eduardo

no seu LoginBean, você precisa injetar o

@Inject
    UsuarioDao dao;

e usar o seu dao na atribuição da variável existe

boolean existe = this.dao.existe(this.usuario);

No UsuarioDAO você não precisa do usuarioDao, você não esta usando em lugar nenhum esse atributo e nem o init.