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();
}
}
[code]/*
- 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 listaVenda = new ArrayList();
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 getListaVenda() {
return listaVenda;
}public void setListaVenda(List 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 getLista() {
return vendaFacade.consultar();
}public void setLista(List 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 getPessoaFisicas() {
List listaPessoaFisicas = new ArrayList();
for (PessoaFisica pf : pfFacade.consultar()) {
listaPessoaFisicas.add(new SelectItem(pf, pf.getDescricao()));
}
return listaPessoaFisicas;
}public List getPessoaJuridicas() {
List listaPessoaJuridicas = new ArrayList();
for (PessoaJuridica pj : pjFacade.consultar()) {
listaPessoaJuridicas.add(new SelectItem(pj, pj.getDescricao()));
}
return listaPessoaJuridicas;
}public List getProdutos() {
List listaProdutos = new ArrayList();
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 getItensVendas() {
return venda.getItensVendas();
}
}
[/code]
[code]/*
- 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();
}
}
[/code]
[code]<?xml version='1.0' encoding='UTF-8' ?>
</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>
[/code]