Null pointer exeption

14 respostas
M

e ai galera boa noite… seguinte tenho esse metodo aqui

HibernateDao<Pessoa> hibernatePessoas = new HibernateDao<Pessoa>(Pessoa.class);
		fornecedores = hibernatePessoas.getFornecedores();
		fornecedor.setNome("Todos");
		fornecedores.add(fornecedor);
		return fornecedores;

mas quando eu adiciono esse objeto aqui

fornecedor.setNome(“Todos”);
fornecedores.add(fornecedor);

ele da java.lang.NullPointerException na hora de eu submeter o formulario

jsf

<p:selectOneMenu value="#{produtoBean.fornecedor}"
							style="width: 200px" converter="fornecedorConverter">
							<f:selectItems value="#{produtoBean.fornecedores}"
								var="fornecedor" itemLabel="#{fornecedor.nome}"
								itemValue="#{fornecedor}" />
						</p:selectOneMenu>

14 Respostas

Hebert_Coelho

Um desses dois caras (ou os dois) estão null.

M

como assim:?

JuniorMaia
fornecedores.add(fornecedor);

o fornecedor deve estar nullo

faz um teste, antes de chamar o fornecedores.add(fornecedor);

use:

system.out.println("fornecedor: "+fornecedor);

e veja o que retorna

M

carra ele não ta null pq ele mostra na lista no selectOneMenu só q quando eu aperto o botão salvar da o null pointer

meu jsf

<!-- Começo Edição de Preços -->

				<p:dialog header="Ajustar Preços" widgetVar="dlg7" resizable="false"
					width="450" height="230" modal="true" id="dialog7">
					<br></br>
					<h:panelGrid columns="2" cellspacing="10">

						<h:outputLabel value="Categoria" />

						<p:selectOneMenu value="#{produtoBean.categoria}"
							style="width: 200px" converter="categoriaConverter">
							<f:selectItems value="#{produtoBean.categorias}" var="categoria"
								itemLabel="#{categoria.nomeCategoria}" itemValue="#{categoria}" />
						</p:selectOneMenu>

						<h:outputLabel value="Fornecedor" />

						<p:selectOneMenu value="#{produtoBean.fornecedor}"
							style="width: 200px" converter="fornecedorConverter">
							<f:selectItems value="#{produtoBean.fornecedores}"
								var="fornecedor" itemLabel="#{fornecedor.nome}"
								itemValue="#{fornecedor}" />
						</p:selectOneMenu>

						<h:outputLabel value="Aplicar Alteração No:" />
						<p:selectOneRadio id="options"
							value="#{produtoBean.alteracaoPreco}">
							<f:selectItem itemLabel="Custo do Produto" itemValue="custo" />
							<f:selectItem itemLabel="Preço de Venda" itemValue="venda" />
						</p:selectOneRadio>
					</h:panelGrid>

					<h:panelGrid columns="6" cellspacing="10">
						<p:spacer height="0" width="20px" />
						<h:outputLabel value="Aplicar Em: " style="text-align: left" />
						<p:spacer height="0" width="20px" />
						<p:inputText value="#{produtoBean.porcentagemAlteracao}"
							style="width: 60px; align: left" />
						<p:spacer height="0" width="2px" />
						<h:outputLabel value=" %" />

					</h:panelGrid>
					<br></br>
					<p:commandButton oncomplete="confirmation1.show()"
						icon="ui-icon-check" style="width: 40px" />

				</p:dialog>

				<p:confirmDialog id="confirmDialog1" message="Confirma Alteração?"
					severity="alert" widgetVar="confirmation1">

					<p:commandButton id="confirm1" value="Sim" update="tbl1, messages"
						oncomplete="confirmation1.hide()"
						actionListener="#{produtoBean.atualizarPrecos}">

					</p:commandButton>
					<p:commandButton id="decline1" value="Não"
						onclick="confirmation1.hide()" type="button" />
				</p:confirmDialog>

				<!-- Fim Edição de Preços -->
Rodrigo_Sasaki

o método getFornecedores() retorna o que quando não encontra nada? null ou uma lista vazia?

Um método que retorna uma lista, sempre deve retornar uma lista vazia quando não encontra nada, nunca null.

robinsonbsilva

michelorth_92,
Se possível mostra um pouco mais do código.
Onde e como vc está declarando a varíavel fornecedores ?

HibernateDao&lt;Pessoa&gt; hibernatePessoas = new HibernateDao&lt;Pessoa&gt;(Pessoa.class);  
   fornecedores = hibernatePessoas.getFornecedores();  
   fornecedor.setNome("Todos");  
   fornecedores.add(fornecedor);  
   return fornecedores;
M

ta ai meu bean inteiro

package br.com.vendas.controller;

import java.io.Serializable;
import java.util.ArrayList;

import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import br.com.vendas.beans.Categoria;
import br.com.vendas.beans.Pessoa;
import br.com.vendas.beans.Produto;
import br.com.vendas.dao.HibernateDao;

@SessionScoped
@ManagedBean
public class ProdutoBean implements Serializable {

	private static final long serialVersionUID = 1L;
	private HibernateDao<Produto> produtoDao = new HibernateDao<Produto>(Produto.class);
	private Produto produto = new Produto();
	private List<Produto> produtos = new ArrayList<Produto>();
	private Produto produtoUpdate = new Produto();
	private String filtro = new String();
	private String param = new String();
	private Categoria categoria = new Categoria();
	private List<Categoria> categorias = new ArrayList<Categoria>();
	private Pessoa fornecedor = new Pessoa();
	private List<Pessoa> fornecedores = new ArrayList<Pessoa>();
	private String alteracaoPreco = new String();
	private Float porcentagemAlteracao = new Float(0);

	public void salvar() {
		try {
			produtoDao.salvar(produto);
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Produto Salvo!", " "));
		} catch (Exception e) {
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro! " + e, " "));
		} finally {
			produto = new Produto();
			produtoDao = new HibernateDao<Produto>(Produto.class);
		}
	}

	public void deletar() {
		try {
			produtoDao.deletar(produto);
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Produto Deletado!", " "));
		} catch (Exception e) {
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro! " + e, " "));
		} finally {
			produto = new Produto();
			produtoDao = new HibernateDao<Produto>(Produto.class);
		}
	}

	public List<Produto> getProdutos() {
		try {
			if (filtro.equals("codigoBarras")) {
				produtos = produtoDao.getFiltro("from Produto as prod where prod.codigoBarras like :codigoBarras", param, filtro);
			} else if (filtro.equals("descricao")) {
				produtos = produtoDao.getFiltro("from Produto as prod where prod.descricao like :descricao", param, filtro);
			} else {
				produtos = produtoDao.getBeans();
			}
		} catch (Exception e) {
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro! " + e, " "));
		}
		return produtos;
	}

	public void atualizar() {
		try {
			produtoDao.atualizar(produtoUpdate);
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Produto Atualizado!", " "));
		} catch (Exception e) {
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro! " + e, " "));
		} finally {
			produtoUpdate = new Produto();
			produtoDao = new HibernateDao<Produto>(Produto.class);
		}

	}

	public void limpar() {
		produto = new Produto();
		produtoUpdate = new Produto();
	}

	public void atualizarPrecos() {
		try {

			porcentagemAlteracao = porcentagemAlteracao / 100;

			if (alteracaoPreco.equals("custo")) {

				if (categoria.getNomeCategoria().equals("Todos") && (fornecedor.getNome().equals("Todos"))) {

					produtos = produtoDao.getBeans();

					for (int i = 0; i < produtos.size(); ++i) {
						produto = produtos.get(i);
						produto.setPrecoCusto(produtos.get(i).getPrecoCusto() * porcentagemAlteracao + produtos.get(i).getPrecoCusto());
						produtoDao.atualizar(produto);
					}

				} else if (categoria.getNomeCategoria().equals("Todos") && fornecedor.getNome() != "Todos") {

					produtos = produtoDao.atualizarPrecos("FROM Produto WHERE id_pessoa='" + fornecedor.getIdPessoa() + "'");

					for (int i = 0; i < produtos.size(); ++i) {
						produto = produtos.get(i);
						produto.setPrecoCusto(produtos.get(i).getPrecoCusto() * porcentagemAlteracao + produtos.get(i).getPrecoCusto());
						produtoDao.atualizar(produto);
					}

				} else if (fornecedor.getNome().equals("Todos") && categoria.getNomeCategoria() != "Todos") {

					produtos = produtoDao.atualizarPrecos("FROM Produto WHERE id_categoria='" + categoria.getIdCategoria() + "'");

					for (int i = 0; i < produtos.size(); ++i) {
						produto = produtos.get(i);
						produto.setPrecoCusto(produtos.get(i).getPrecoCusto() * porcentagemAlteracao + produtos.get(i).getPrecoCusto());
						produtoDao.atualizar(produto);
					}

				} else if (fornecedor.getNome() != "Todos" && categoria.getNomeCategoria() != "Todos") {

					produtos = produtoDao.atualizarPrecos("FROM Produto WHERE id_pessoa='" + fornecedor.getIdPessoa() + "' AND id_categoria='" + categoria.getIdCategoria() + "'");

					for (int i = 0; i < produtos.size(); ++i) {
						produto = produtos.get(i);
						produto.setPrecoCusto(produtos.get(i).getPrecoCusto() * porcentagemAlteracao + produtos.get(i).getPrecoCusto());
						produtoDao.atualizar(produto);
					}

				}
			} else if (alteracaoPreco.equals("venda")) {

				if (categoria.getNomeCategoria().equals("Todos") && (fornecedor.getNome().equals("Todos"))) {

					produtos = produtoDao.getBeans();

					for (int i = 0; i < produtos.size(); ++i) {
						produto = new Produto();
						produto = produtos.get(i);
						produto.setValor(produtos.get(i).getValor() * porcentagemAlteracao + produtos.get(i).getValor());
						produtoDao.atualizar(produto);
					}

				} else if (categoria.getNomeCategoria().equals("Todos") && fornecedor.getNome() != "Todos") {

					produtos = produtoDao.atualizarPrecos("FROM Produto WHERE id_pessoa='" + fornecedor.getIdPessoa() + "'");

					for (int i = 0; i < produtos.size(); ++i) {
						produto = new Produto();
						produto = produtos.get(i);
						produto.setValor(produtos.get(i).getValor() * porcentagemAlteracao + produtos.get(i).getValor());
						produtoDao.atualizar(produto);
					}

				} else if (fornecedor.getNome().equals("Todos") && categoria.getNomeCategoria() != "Todos") {

					produtos = produtoDao.atualizarPrecos("FROM Produto WHERE id_categoria='" + categoria.getIdCategoria() + "'");

					for (int i = 0; i < produtos.size(); ++i) {
						produto = new Produto();
						produto = produtos.get(i);
						produto.setValor(produtos.get(i).getValor() * porcentagemAlteracao + produtos.get(i).getValor());
						produtoDao.atualizar(produto);
					}

				} else if (fornecedor.getNome() != "Todos" && categoria.getNomeCategoria() != "Todos") {

					produtos = produtoDao.atualizarPrecos("FROM Produto WHERE id_pessoa='" + fornecedor.getIdPessoa() + "' AND id_categoria='" + categoria.getIdCategoria() + "'");

					for (int i = 0; i < produtos.size(); ++i) {
						produto = new Produto();
						produto = produtos.get(i);
						produto.setValor(produtos.get(i).getValor() * porcentagemAlteracao + produtos.get(i).getValor());
						produtoDao.atualizar(produto);
					}
				}

			}

			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Preços Atualizados!", " "));
		} catch (Exception e) {
			System.out.println(e);
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro! " + e, " "));
		} finally {
			alteracaoPreco = new String();
			porcentagemAlteracao = new Float(0);
			categoria = new Categoria();
			fornecedor = new Pessoa();
			produto = new Produto();
		}
	}

	public List<Categoria> getCategorias() {
		HibernateDao<Categoria> hibernateCat = new HibernateDao<Categoria>(Categoria.class);
		categorias = hibernateCat.getBeans();
		return categorias;
	}

	public List<Pessoa> getFornecedores() {
		HibernateDao<Pessoa> hibernatePessoas = new HibernateDao<Pessoa>(Pessoa.class);
		fornecedores = hibernatePessoas.getFornecedores();
		return fornecedores;
	}

	public void setCategorias(List<Categoria> categorias) {
		this.categorias = categorias;
	}

	public HibernateDao<Produto> getProdutoDao() {
		return produtoDao;
	}

	public void setProdutoDao(HibernateDao<Produto> produtoDao) {
		this.produtoDao = produtoDao;
	}

	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public void setProdutos(List<Produto> produtos) {
		this.produtos = produtos;
	}

	public Produto getProdutoUpdate() {
		return produtoUpdate;
	}

	public void setProdutoUpdate(Produto produtoUpdate) {
		this.produtoUpdate = produtoUpdate;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public String getFiltro() {
		return filtro;
	}

	public void setFiltro(String filtro) {
		this.filtro = filtro;
	}

	public String getParam() {
		return param;
	}

	public void setParam(String param) {
		this.param = param;
	}

	public Categoria getCategoria() {
		return categoria;
	}

	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}

	public Pessoa getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(Pessoa fornecedor) {
		this.fornecedor = fornecedor;
	}

	public void setFornecedores(List<Pessoa> fornecedores) {
		this.fornecedores = fornecedores;
	}

	public String getAlteracaoPreco() {
		return alteracaoPreco;
	}

	public void setAlteracaoPreco(String alteracaoPreco) {
		this.alteracaoPreco = alteracaoPreco;
	}

	public Float getPorcentagemAlteracao() {
		return porcentagemAlteracao;
	}

	public void setPorcentagemAlteracao(Float porcentagemAlteracao) {
		this.porcentagemAlteracao = porcentagemAlteracao;
	}

}
Rodrigo_Sasaki

Sensacional, mas o código necessário é o do getFornecedores().

o que ele está retornando ?

M

ele retorna uma lista certinho o problema é que assim funciona

public List<Pessoa> getFornecedores() {
		HibernateDao<Pessoa> hibernatePessoas = new HibernateDao<Pessoa>(Pessoa.class);
		fornecedores = hibernatePessoas.getFornecedores();
		return fornecedores;
	}

mas eu preciso assim

public List<Pessoa> getFornecedores() {
		HibernateDao<Pessoa> hibernatePessoas = new HibernateDao<Pessoa>(Pessoa.class);
		fornecedores = hibernatePessoas.getFornecedores();

fornecedor.setNome("Todos");
fornecedores.add(fornecedor);
		return fornecedores;
	}
Rodrigo_Sasaki

cara, julgando pela alteração no método que fez ele lançar uma NullPointerException, a única coisa que posso dizer é que seu fornecedor não está inicializado.

G

caralho!
amigo na boa, refatora seu código, ta um espaguete que só!
artigo que pode lhe ajudar http://msdn.microsoft.com/pt-br/magazine/cc947917.aspx

satangoss

Cara o seu hibernatePessoas.getFornecedores() deveria vir com objetos Pessoas já construidos e com seus valores setados, não precisaria setar manualmente depois de buscar.
Tenta colocar um breakpoint nesse método e verifica como está vindo.
Se não vier nada o problema é nesse metodo hibernatePessoas.getFornecedores();

Rodrigo_Sasaki

satangoss:
Cara o seu hibernatePessoas.getFornecedores() deveria vir com objetos Pessoas já construidos e com seus valores setados, não precisaria setar manualmente depois de buscar.
Tenta colocar um breakpoint nesse método e verifica como está vindo.
Se não vier nada o problema é nesse metodo hibernatePessoas.getFornecedores();

De acordo com ele o método funciona, o que eu acredito que ele está tentando fazer, é adicionar um Fornecedor “Todos” à lista, além daqueles que ja vem do banco. Provavelmente só para popular algo na View.

satangoss

digaoneves:
satangoss:
Cara o seu hibernatePessoas.getFornecedores() deveria vir com objetos Pessoas já construidos e com seus valores setados, não precisaria setar manualmente depois de buscar.
Tenta colocar um breakpoint nesse método e verifica como está vindo.
Se não vier nada o problema é nesse metodo hibernatePessoas.getFornecedores();

De acordo com ele o método funciona, o que eu acredito que ele está tentando fazer, é adicionar um Fornecedor “Todos” à lista, além daqueles que ja vem do banco. Provavelmente só para popular algo na View.


Ok então possivelmente ele deve estar usando um selectOneMenu, com isso basta adicionar dentro do componente um item como :

<f:selectItem itemLabel="Todos" itemValue="0"/>

e só enviar o conteúdo da lista no getFornecedores

public List<Pessoa> getFornecedores() { HibernateDao<Pessoa> hibernatePessoas = new HibernateDao<Pessoa>(Pessoa.class); return hibernatePessoas.getFornecedores(); }

Criado 29 de maio de 2012
Ultima resposta 31 de mai. de 2012
Respostas 14
Participantes 7