ManagedBean e ManagedProperty NullPointerException

10 respostas
F

Bom dia galera!

Estou tendo um problema com NullPointerException, em um ManagedProperty...

Tenho um formulario de cadastro de cliente, nele tem outro managedbean que é o comboBox (estado e cidade)...
E ao implementar o managedproperty começou dar erro.

Olha como está meu código:
NovoClienteBean.java:

@ManagedBean(name="novoClienteBean")
@ViewScoped
public class NovoClienteBean implements Serializable {
    private String codigo;
    private String razao;
    private String cnpj;
    private String ie;
    private String nome;
    private String email;
    private String endereco;
    private String bairro;
    @ManagedProperty(value="#{comboBean.estado}") 
    private Estado estado;
    @ManagedProperty(value="#{comboBean.cidade}") 
    private Cidade cidade;
    private String cep;
....
clientes.xhtml:

<p:row>
                                <p:column styleClass="formu">
                                    <h:outputLabel for="estado" value="Estado" />
                                </p:column>
                                <p:column>
                                    <div class="formuinput">
                                        <p:selectOneMenu id="estado" value="#{comboBean.estado}" converter="#{converterEstado}" >
                                            <f:selectItem itemLabel="Selecione" />
                                            <f:selectItems value="#{comboBean.estados}" var="e" itemValue="#{e}" itemLabel="#{e.est_nome}" />
                                            <f:ajax render="cidade" event="change" listener="#{comboBean.listaCidades}" />
                                        </p:selectOneMenu>
                                    </div>
                                    <div class="formuerror">
                                        <p:message id="estadoMessage" for="estadoMessage" />  
                                    </div> 
                                </p:column>
                            </p:row>
converterEstado.java:

@FacesConverter(value = "converterEstado")
public class ConverterEstado implements Converter {

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value != null && !value.equals("")) {
            EstadoDao estDao = new EstadoDao();
            return estDao.getEstadoById(Long.valueOf(value));
        }
        return null;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (value instanceof Estado) {
            Estado estado = (Estado) value;
            return String.valueOf(estado.getEst_id());
        }
        return "";
    }
}
converterCidade.java:

@FacesConverter(value="converterCidade")
public class ConverterCidade implements Converter {

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value != null && !value.equals("")) {
            CidadeDao cidDao = new CidadeDao();
            return cidDao.getCidadeById(Long.valueOf(value));
        }
        return null;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (value instanceof Cidade) {
            Cidade municipio = (Cidade) value;
            return String.valueOf(municipio.getCid_id());
        }
        return "";
    }
}
entidade estado.java:

public class Estado implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "est_id")
    private Long est_id;
    @Column(name = "est_nome", nullable=false)
    private String est_nome;
    @Column(name = "est_sigla", unique=true, nullable=false)
    private String est_sigla;

    public long getEst_id() {
        return est_id;
    }

    public void setEst_id(long est_id) {
        this.est_id = est_id;
    }
comboBean.java:

@ManagedBean
@ViewScoped
public class ComboBean implements Serializable {
    
    private final EstadoDao estDao = new EstadoDao();
    private final CidadeDao cidDao = new CidadeDao();
    private List<Estado> estados;
    private List<Cidade> cidades;
    private Cidade cidade;
    private Estado estado;
    
    public ComboBean() {
        
    }
    
    @PostConstruct
    public void init() {
        estados = estDao.listarTodos();
        if(cidade == null){
            cidade = new Cidade();
        }
        if(estado == null){
            estado = new Estado();
        }
    }
    
    public void listaCidades(AjaxBehaviorEvent event) {
        cidades = cidDao.listarTodos(estado);
    }

    public Cidade getCidade() {
        return cidade;
    }

    public void setCidade(Cidade cidade) {
        this.cidade = cidade;
    }

    public List<Cidade> getCidades() {
        return cidades;
    }

    public void setCidades(List<Cidade> cidades) {
        this.cidades = cidades;
    }

    public Estado getEstado() {
        return estado;
    }

    public void setEstado(Estado estado) {
        this.estado = estado;
    }

    public List<Estado> getEstados() {
        return estados;
    }

    public void setEstados(List<Estado> estados) {
        this.estados = estados;
    }
    
}
Erro:

SEVERE: Error Rendering View[/vendas/clientes.xhtml]
java.lang.NullPointerException
	at br.com.zanzini.entity.Estado.getEst_id(Estado.java:33)
	at br.com.zanzini.converter.ConverterEstado.getAsString(ConverterEstado.java:35)
	at org.primefaces.util.ComponentUtils.getValueToRender(ComponentUtils.java:68)
	at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeLabel(SelectOneMenuRenderer.java:120)
	at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeMarkup(SelectOneMenuRenderer.java:89)
	at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeEnd(SelectOneMenuRenderer.java:62)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
	at org.primefaces.component.panelgrid.PanelGridRenderer.encodeRow(PanelGridRenderer.java:137)
	at org.primefaces.component.panelgrid.PanelGridRenderer.encodeStaticBody(PanelGridRenderer.java:107)
	at org.primefaces.component.panelgrid.PanelGridRenderer.encodeBody(PanelGridRenderer.java:63)
	at org.primefaces.component.panelgrid.PanelGridRenderer.encodeEnd(PanelGridRenderer.java:49)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
	at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:59)
	at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:43)
	at org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:198)
	at org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:115)
	at org.primefaces.component.panel.PanelRenderer.encodeEnd(PanelRenderer.java:55)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:55)
	at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:43)
	at org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:51)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:722)
Linha 33 do Estado.java:
return est_id;
Linha 35 do converterEstado.java:
return String.valueOf(estado.getEst_id());

Desculpe o post super grande, eu quis detalhar bem o que está ocorrendo...
Sou novo em Java Web.

Obrigado desde já!

Abraço!

10 Respostas

H

Opa, beleza?

Seu nullpointer está aqui:
br.com.zanzini.entity.Estado.getEst_id(Estado.java:33)

O que tem nessa linha?

H

Eu prometo para você que a linha 33 da sua entidade estado não é return est_id;

Não via dar null pointer nesse comando.

Caso realmente seja essa a linha, você pode estar rodando um código antigo no servidor. Limpe os arquivos temporários e execute novamente.

F
Hebert Coelho:
Opa, beleza?

Seu nullpointer está aqui:
br.com.zanzini.entity.Estado.getEst_id(Estado.java:33)

O que tem nessa linha?

Eu citei ali no poste, é o arquivo Estado.java, a linha é
return est_id;
O arquivo inteiro:
@Entity
@Table(name = "Estado")
public class Estado implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "est_id")
    private Long est_id;
    @Column(name = "est_nome", nullable=false)
    private String est_nome;
    @Column(name = "est_sigla", unique=true, nullable=false)
    private String est_sigla;

    public long getEst_id() {
        return est_id;
    }

    public void setEst_id(long est_id) {
        this.est_id = est_id;
    }

    public String getEst_nome() {
        return est_nome;
    }

    public void setEst_nome(String est_nome) {
        this.est_nome = est_nome;
    }
    
    public String getEst_sigla(){
        return est_sigla;
    }
    public void setEst_sigla(String est_sigla){
        this.est_sigla = est_sigla;
    }
    
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Estado other = (Estado) obj;
        if (this.est_id != other.est_id && (this.est_id == null || !this.est_id.equals(other.est_id))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 41 * hash + (this.est_id != null ? this.est_id.hashCode() : 0);
        return hash;
    }
F

Hebert Coelho:
Eu prometo para você que a linha 33 da sua entidade estado não é return est_id;

Não via dar null pointer nesse comando.

Caso realmente seja essa a linha, você pode estar rodando um código antigo no servidor. Limpe os arquivos temporários e execute novamente.

Voce diz isso por ser um long, correto?

Veja que em vez de long eu coloquei Long, porque? Pra verificar se é null no hashcode, que é a linha:

H

faelzindc:
Voce diz isso por ser um long, correto?

Veja que em vez de long eu coloquei Long, porque? Pra verificar se é null no hashcode, que é a linha:

hash = 41 * hash + (this.est_id != null ? this.est_id.hashCode() : 0);

E aí? continuou o problema? O.o

Se você deixa long, não vai precisar fazer o if. Caso não exista valor o default é 0.

F

Hebert Coelho:
faelzindc:
Voce diz isso por ser um long, correto?

Veja que em vez de long eu coloquei Long, porque? Pra verificar se é null no hashcode, que é a linha:

hash = 41 * hash + (this.est_id != null ? this.est_id.hashCode() : 0);

E aí? continuou o problema? O.o

Se você deixa long, não vai precisar fazer o if. Caso não exista valor o default é 0.

Não consegui, eu preciso deixar como Long, por causa que ele da erro no comboBox que eu fiz se eu tirar.
Olha o tutorial que eu segui pra fazer o combo box:

Edit: ai no tutorial mostra o erro que da se eu tirar o hashcode

H

Mas eu não falei para retirar o hash, apenas deixar como long.

hash = 41 * hash + est_id;

sendo que est_id seria long e não Long

F

Hebert Coelho:
Mas eu não falei para retirar o hash, apenas deixar como long.

hash = 41 * hash + est_id;

sendo que est_id seria long e não Long

Obrigado Hebert, estou quase lá!

O erro sumiu, agora o ManagedProperty não está funcionando, eu coloquei no meu ManagedBean que está sendo executado ao clicar no submit:

@ManagedProperty(value="#{comboBean.estado}") private Estado estado; @ManagedProperty(value="#{comboBean.cidade}") private Cidade cidade;
Certo?

Ai no método que é executado, eu coloquei pra testar:

Ele só retorna NULL, o que pode ser?

H

Não sei.

Veja se você fez o mesmo que é feito nesse post: Aplicação Web Completa Tomcat JSF Primefaces JPA Hibernate

F

Hebert Coelho:
Não sei.

Veja se você fez o mesmo que é feito nesse post: Aplicação Web Completa Tomcat JSF Primefaces JPA Hibernate

Obrigado amigo!
Eu estava fazendo de forma errada, eu nao estava colocando o ManagedProperty em uma classe, daí não conseguia fazer o que queria!
Assim que eu vou aprendendo hehehe…
Muito obrigado mesmo!

Criado 7 de novembro de 2012
Ultima resposta 7 de nov. de 2012
Respostas 10
Participantes 2