Boa noite pessoal, estou fazendo uma movimentação (venda) no projeto e me deparei com o seguinte erro e não consigo achar a solução:
/gestao/vendaedita.xhtml @49,113 value="#{vendaControle.itensVenda.quantidade}": Target Unreachable, 'null' returned null
Alguém pode me ajudar?
Segue abaixo o bean as entidades envolvidas e a visão.
Obrigado.
Abraço.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.nfacil.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
/**
*
* @author Lucas
*/
@Entity
public class Venda implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Temporal(TemporalType.DATE)
private Date dataVenda;
@Column
private Double vlTotal;
@OneToMany(cascade = CascadeType.ALL, fetch= FetchType.EAGER)
private List<ItensVenda> itensVendas;
@ManyToOne
private PessoaFisica clientePF;
@ManyToOne
private PessoaJuridica clientePJ;
@Column
private String natureza;
public Venda() {
this.vlTotal = Double.valueOf("0");
this.itensVendas = new ArrayList<ItensVenda>();
}
public Long getId() {
return id;
}
public String getNatureza() {
return natureza;
}
public void setNatureza(String natureza) {
this.natureza = natureza;
}
public PessoaFisica getClientePF() {
return clientePF;
}
public void setClientePF(PessoaFisica clientePF) {
this.clientePF = clientePF;
}
public PessoaJuridica getClientePJ() {
return clientePJ;
}
public void setClientePJ(PessoaJuridica clientePJ) {
this.clientePJ = clientePJ;
}
public Date getDataVenda() {
return dataVenda;
}
public void setDataVenda(Date dataVenda) {
this.dataVenda = dataVenda;
}
public List<ItensVenda> getItensVendas() {
return itensVendas;
}
public void setItensVendas(ArrayList<ItensVenda> itensVendas) {
this.itensVendas = itensVendas;
}
public Double getVlTotal() {
return vlTotal;
}
public void setVlTotal(Double vlTotal) {
this.vlTotal = vlTotal;
}
public void setId(Long id) {
this.id = id;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Venda)) {
return false;
}
Venda other = (Venda) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return id.toString();
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.nfacil.model;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
/**
*
* @author Lucas
*/
@Entity
public class ItensVenda implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column
private Double vlUniit;
@Column
private Double quantidade;
@Column
private Double subTotal;
@ManyToOne
private Produto produto;
@Column
private Integer cfop;
public ItensVenda() {
}
public Long getId() {
return id;
}
public Integer getCfop() {
return cfop;
}
public void setCfop(Integer cfop) {
this.cfop = cfop;
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public Double getQuantidade() {
return quantidade;
}
public void setQuantidade(Double quantidade) {
this.quantidade = quantidade;
}
public Double getSubTotal() {
return subTotal;
}
public void setSubTotal(Double subTotal) {
this.subTotal = subTotal;
}
public Double getVlUniit() {
return vlUniit;
}
public void setVlUniit(Double vlUniit) {
this.vlUniit = vlUniit;
}
public void setId(Long id) {
this.id = id;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof ItensVenda)) {
return false;
}
ItensVenda other = (ItensVenda) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return id.toString();
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.nfacil.control;
import br.com.nfacil.converter.ConverterGenerico;
import br.com.nfacil.facade.VendaFacade;
import br.com.nfacil.facade.PessoaFisicaFacade;
import br.com.nfacil.facade.PessoaJuridicaFacade;
import br.com.nfacil.facade.ProdutoFacade;
import br.com.nfacil.model.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.convert.Converter;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
/**
*
* @author lucas
*/
@ManagedBean(name = "vendaControle")
@SessionScoped
public class VendaControle implements Serializable {
private Venda venda = new Venda();
@EJB
private VendaFacade vendaFacade;
@EJB
private PessoaFisicaFacade pfFacade;
@EJB
private PessoaJuridicaFacade pjFacade;
@EJB
private ProdutoFacade produtoFacade;
private Converter pfConverter;
private Converter pjConverter;
private Converter produtoConverter;
private ItensVenda itensVenda;
private List<Venda> listaVenda = new ArrayList<Venda>();
private Integer tipoCliente = 0;
private Double vlVenda;
public void salvar() {
vendaFacade.salvar(venda);
}
public void novo() {
venda = new Venda();
itensVenda = new ItensVenda();
}
public Integer getTipoCliente() {
return tipoCliente;
}
public Boolean getComboPF() {
if (this.tipoCliente == 1) {
return true;
} else {
return false;
}
}
public void combo() {
getComboPF();
getComboPJ();
}
public Boolean getComboPJ() {
if (this.tipoCliente == 2) {
return true;
} else {
return false;
}
}
public void setTipoCliente(Integer tipoCliente) {
this.tipoCliente = tipoCliente;
}
public Converter getPessoaFisicaConverter() {
if (pfConverter == null) {
pfConverter = new ConverterGenerico(pfFacade);
}
return pfConverter;
}
public Converter getPessoaJuridicaConverter() {
if (pjConverter == null) {
pjConverter = new ConverterGenerico(pjFacade);
}
return pjConverter;
}
public Converter getProdutoConverter() {
if (produtoConverter == null) {
produtoConverter = new ConverterGenerico(produtoFacade);
}
return produtoConverter;
}
public List<Venda> getListaVenda() {
return listaVenda;
}
public void setListaVenda(List<Venda> listaVenda) {
this.listaVenda = listaVenda;
}
public Converter getPfConverter() {
return pfConverter;
}
public void setPfConverter(Converter pfConverter) {
this.pfConverter = pfConverter;
}
public PessoaFisicaFacade getPfFacade() {
return pfFacade;
}
public void setPfFacade(PessoaFisicaFacade pfFacade) {
this.pfFacade = pfFacade;
}
public Converter getPjConverter() {
return pjConverter;
}
public void setPjConverter(Converter pjConverter) {
this.pjConverter = pjConverter;
}
public PessoaJuridicaFacade getPjFacade() {
return pjFacade;
}
public void setPjFacade(PessoaJuridicaFacade pjFacade) {
this.pjFacade = pjFacade;
}
public ProdutoFacade getProdutoFacade() {
return produtoFacade;
}
public void setProdutoFacade(ProdutoFacade produtoFacade) {
this.produtoFacade = produtoFacade;
}
public void cancelar() {
venda = new Venda();
}
public void setPessoaFisicaConverter(Converter pfConverter) {
this.pfConverter = pfConverter;
}
public void setPessoaJuridicaConverter(Converter pjConverter) {
this.pjConverter = pjConverter;
}
public void setProdutoConverter(Converter produtoConverter) {
this.produtoConverter = produtoConverter;
}
public Double getVlVenda() {
if (itensVenda == null) {
return Double.parseDouble("0");
} else if (itensVenda.getProduto() == null) {
return Double.parseDouble("0");
} else {
return itensVenda.getProduto().getVlvenda();
}
}
public void setVlVenda(Double vlVenda) {
this.vlVenda = vlVenda;
}
public void adicionarProduto() {
itensVenda.setVlUniit(itensVenda.getProduto().getVlvenda());
itensVenda.setSubTotal((itensVenda.getSubTotal()) * itensVenda.getQuantidade());
venda.getItensVendas().add(itensVenda);
venda.setVlTotal(venda.getVlTotal() + itensVenda.getSubTotal());
itensVenda = new ItensVenda();
}
public void editar(ActionEvent e) {
venda = (Venda) e.getComponent().getAttributes().get("venda");
}
public void excluir(ActionEvent e) {
venda = (Venda) e.getComponent().getAttributes().get("venda");
vendaFacade.remove(venda);
}
public List<Venda> getLista() {
return vendaFacade.consultar();
}
public void setLista(List<Venda> lista) {
this.listaVenda = lista;
}
public VendaFacade getVendaFacade() {
return vendaFacade;
}
public void setVendaFacade(VendaFacade vendaFacade) {
this.vendaFacade = vendaFacade;
}
public Venda getVenda() {
return venda;
}
public void setVenda(Venda venda) {
this.venda = venda;
}
public ItensVenda getItensVenda() {
return itensVenda;
}
public void setItensVenda(ItensVenda itensVenda) {
this.itensVenda = itensVenda;
}
public List<SelectItem> getPessoaFisicas() {
List<SelectItem> listaPessoaFisicas = new ArrayList<SelectItem>();
for (PessoaFisica pf : pfFacade.consultar()) {
listaPessoaFisicas.add(new SelectItem(pf, pf.getDescricao()));
}
return listaPessoaFisicas;
}
public List<SelectItem> getPessoaJuridicas() {
List<SelectItem> listaPessoaJuridicas = new ArrayList<SelectItem>();
for (PessoaJuridica pj : pjFacade.consultar()) {
listaPessoaJuridicas.add(new SelectItem(pj, pj.getDescricao()));
}
return listaPessoaJuridicas;
}
public List<SelectItem> getProdutos() {
List<SelectItem> listaProdutos = new ArrayList<SelectItem>();
for (Produto p : produtoFacade.consultar()) {
listaProdutos.add(new SelectItem(p, p.getDescricao()));
}
return listaProdutos;
}
public void calculaProduto() {
itensVenda.setSubTotal(itensVenda.getProduto().getVlvenda() * itensVenda.getQuantidade());
}
public List<ItensVenda> getItensVendas() {
return venda.getItensVendas();
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.nfacil.model;
import java.io.Serializable;
import javax.persistence.*;
/**
*
* @author Lucas
*/
@Entity
public class Produto implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column
private String descricao;
@Column
private String marca;
@Column
private String codbarras;
@Column
private String ncm;
@Column
private String unmed;
@Column
private Double vlcusto;
@Column
private Double perlucro;
@Column
private Double vlvenda;
@Column
private Double estoque;
@Column
private Double alicms;
@Column
private Double alpis;
@Column
private Double alcofins;
@ManyToOne
private Grupo grupo;
@Column
private Boolean ativo;
public Double getAlcofins() {
return alcofins;
}
public void setAlcofins(Double alcofins) {
this.alcofins = alcofins;
}
public Double getAlicms() {
return alicms;
}
public void setAlicms(Double alicms) {
this.alicms = alicms;
}
public Double getAlpis() {
return alpis;
}
public void setAlpis(Double alpis) {
this.alpis = alpis;
}
public Boolean getAtivo() {
return ativo;
}
public void setAtivo(Boolean ativo) {
this.ativo = ativo;
}
public String getCodbarras() {
return codbarras;
}
public void setCodbarras(String codbarras) {
this.codbarras = codbarras;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Double getEstoque() {
return estoque;
}
public void setEstoque(Double estoque) {
this.estoque = estoque;
}
public Grupo getGrupo() {
return grupo;
}
public void setGrupo(Grupo grupo) {
this.grupo = grupo;
}
public String getMarca() {
return marca;
}
public void setMarca(String marca) {
this.marca = marca;
}
public String getNcm() {
return ncm;
}
public void setNcm(String ncm) {
this.ncm = ncm;
}
public Double getPerlucro() {
return perlucro;
}
public void setPerlucro(Double perlucro) {
this.perlucro = perlucro;
}
public String getUnmed() {
return unmed;
}
public void setUnmed(String unmed) {
this.unmed = unmed;
}
public Double getVlcusto() {
return vlcusto;
}
public void setVlcusto(Double vlcusto) {
this.vlcusto = vlcusto;
}
public Double getVlvenda() {
return vlvenda;
}
public void setVlvenda(Double vlvenda) {
this.vlvenda = vlvenda;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Produto)) {
return false;
}
Produto other = (Produto) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return id.toString();
}
}
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core">
<ui:decorate template="/WEB-INF/WebTemplate.xhtml">
<ui:define name="menu"></ui:define>
<ui:define name="centro">
<h:form id="formulario">
<p:growl id="messages"/>
<p:fieldset legend="Lançamento de Vendas">
<h:panelGrid columns="6">
<h:outputText value="Data da Operação"/>
<p:calendar value="#{vendaControle.venda.dataVenda}" required="true"
requiredMessage="A data é obrigatória" lang="pt_BR" pattern="dd/MM/yyyy"/>
<h:outputText value="Natureza da Operação"/>
<p:inputText value="#{vendaControle.venda.natureza}"/>
<h:outputText value="Tipo do Cliente"/>
<p:selectOneMenu id="tipoCli" value="#{vendaControle.tipoCliente}" converter="IntegerConverter">
<f:selectItem itemLabel="Selecione o tipo do cliente" itemValue="0"/>
<f:selectItem itemLabel="Pessoa Física" itemValue="1"/>
<f:selectItem itemLabel="Pessoa Jurídica" itemValue="2"/>
<p:ajax update="combos combopf combopj" event="change" listener="#{vendaControle.combo}"/>
</p:selectOneMenu>
<h:outputText value="Cliente"/>
<p:panel id="combos">
<p:selectOneMenu id="combopf" value="#{vendaControle.venda.clientePF}" converter="#{vendaControle.pessoaFisicaConverter}" required="true" requiredMessage="Selecione o Cliente" rendered="#{vendaControle.comboPF}">
<f:selectItem itemLabel="Selecione a pessoa" itemValue="0"/>
<f:selectItems value="#{vendaControle.pessoaFisicas}"/>
</p:selectOneMenu>
<p:selectOneMenu id="combopj" value="#{vendaControle.venda.clientePJ}" converter="#{vendaControle.pessoaJuridicaConverter}" required="true" requiredMessage="Selecione o Cliente" rendered="#{vendaControle.comboPJ}">
<f:selectItem itemLabel="Selecione a empresa" itemValue="0"/>
<f:selectItems value="#{vendaControle.pessoaJuridicas}"/>
</p:selectOneMenu>
</p:panel>
<h:outputText/><h:outputText/><h:outputText/><h:outputText/>
<h:outputText value="Valor total da operação"/>
<h:outputText id="vtot" value="#{vendaControle.venda.vlTotal}"/>
<h:outputText/><h:outputText/><h:outputText/><h:outputText/>
<h:outputText value="Selecione um produto"/>
<p:selectOneMenu value="#{vendaControle.itensVenda.produto}" converter="#{vendaControle.produtoConverter}">
<f:selectItem itemLabel="Selecione o produto" itemValue="0"/>
<f:selectItems value="#{vendaControle.produtos}"/>
<p:ajax update="@this quant" event="change"/>
</p:selectOneMenu>
<h:outputText value="Quantidade"/>
<p:inputText id="quant" value="#{vendaControle.itensVenda.quantidade}" immediate="true">
</p:inputText>
<h:outputText/><h:outputText/>
<p:commandButton value="Adicionar" actionListener="#{vendaControle.adicionarProduto}" immediate="true">
<p:ajax event="click" update="tabela vtot"/>
</p:commandButton>
<h:outputText/><h:outputText/><h:outputText/><h:outputText/>
<p:commandButton value="Novo" action="/gestao/vendaedita" actionListener="#{vendaControle.novo()}" ajax="false" immediate="true"/>
<p:commandButton value="Salvar" action="vendalista" actionListener="#{vendaControle.salvar()}" ajax="false"/>
<p:commandButton value="Cancelar" action="vendaLista" actionListener="#{vendaControle.cancelar()}" ajax="false" immediate="true"/>
</h:panelGrid>
</p:fieldset>
<p:panel id="tabelapanel">
<p:dataTable id="tabela" value="#{vendaControle.itensVendas}" var="item">
<p:column headerText="Produto">
<p align="center">
<h:outputText value="#{item.produto.id}"/>
</p>
</p:column>
<p:column headerText="Descrição">
<h:outputText value="#{item.produto.descricao}"/>
</p:column>
<p:column headerText="Quantidade">
<p align="center">
<h:outputText value="#{item.quantidade}"/>
</p>
</p:column>
<p:column headerText="Total">
<p align="center">
<h:outputText value="#{item.subTotal}"/>
</p>
</p:column>
</p:dataTable>
</p:panel>
</h:form>
</ui:define>
</ui:decorate>
</html>
