Erro ao salvar , xhtml e manegeBean[Ache o Erro]

Boa noite pessoal , quando tento salvar uma variável no xhtml diz que minha variável é nula.
que estar retornando um valor nulo,
Tipo esse a seguir:

value="#{fabricanteBean.fabricante.descricao}": Target Unreachable, [fabricante] returned null

Ja tentei ver qual é o problema mais o meu codigo parece estar certo.

E o problema estar apenas nessa entidade

Abaixo vai os meus codigos do ManegeBen e o xhtml, se souberem resolver serei muito grato!

package br.pro.james.drogaria.bean;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import org.omnifaces.util.Messages;

import br.pro.james.drogaria.dao.FabricanteDao;
import br.pro.james.drogaria.domain.Fabricante;
@SuppressWarnings(“serial”)
@ManagedBean
@ViewScoped
public class FabricanteBean implements Serializable {

private Fabricante fabricante;

public List<Fabricante> fabricantes;


@PostConstruct
public void Listar() {
	try {   
		
	FabricanteDao fabricanteDao = new FabricanteDao();
	fabricanteDao.listar();
	
	
	}catch(RuntimeException erro) {
		Messages.addGlobalInfo("Ocoreu um erro ao tentar listar os fabricantes");
		erro.printStackTrace();
	}
	
}


public Fabricante getFabricante() {
	return fabricante;
}


public void setFabricante(Fabricante fabricante) {
	this.fabricante = fabricante;
}


public List<Fabricante> getFabricantes() {
	return fabricantes;
}


public void setFabricantes(List<Fabricante> fabricantes) {
	this.fabricantes = fabricantes;
}


public void novo() {
	
	fabricante = new Fabricante();
	
	
}

public void salvar() {
try {

	FabricanteDao fabricanteDao = new FabricanteDao();
	fabricanteDao.merge(fabricante);
	

	fabricante = new Fabricante();
	
}catch(RuntimeException erro) {
	Messages.addGlobalInfo("Ocoreu um erro ao tentar salvar os fabricantes");
	erro.printStackTrace();

xhtml :

<?xml version="1.0" encoding="UTF-8" ?>

<h:head>

Fabricantes

<h:form id=“formListagem”>
<p:panel header=“Fabricante - Listagem”>
<p:dataTable emptyMessage=“Nenhum registro encontado.“
paginator=“true” value=”#{fabricanteBean.fabricantes}” var=“fabricantecursor”>

<f:facet name=“header”>
<p:commandButton value=“Novo” oncomplete = “PF(‘dialogo’).show();“
actionListiner=”#{fabricanteBean.novo()}”/>
</f:facet>

<p:column headerText=“Nome”>
<h:outputText value="#{fabricantecursor.descricao}" />
</p:column>
<p:column headerText=“Opções”>

</p:column>

</p:dataTable>
</p:panel>
</h:form>

 <p:dialog header ="Fabricantes - Cadastro" widgetVar="dialogo"
 draggable="false" resizable="false" modal="true" closable ="false">
 <h:form>

 <h:panelGrid columns = "2">
 
 <p:outputLabel  value="Nome:" />
 <p:inputText  maxlenght="50" size ="30" value="#{fabricanteBean.fabricante.descricao}"/>
 

 </h:panelGrid>
 
  
 <h:panelGrid columns = "2">
 

 <p:commandButton value="Salvar" oncomplete = "PF('dialogo').hide();" actionListener="#{fabricanteBean.salvar}"
 />
    <p:commandButton value="Fechar" oncomplete = "PF('dialogo').hide();"/>
  
  </h:panelGrid>
  </h:form>
 </p:dialog>

</h:body>

Obs: não sei se o erro estar no xhtml ou no manageBen, O hibernate funcionando perfeitamente.
O Domain e o Dao tambem.

O que esta acontecendo é que você declara a variável do tipo Fabricante, porém em nenhum momento no código você instância o objeto.

Tipo tenta assim

private Fabricante fabricante= new Fabricante();

1 curtida

Obrigado amigo resolveu , o problema é que eu quero instanciar o objeto quando eu clico no botão novo do xhtml , eu tinha pensado nisso antes, mas tu resolveu o caso, mas o que eu quero é uma instancia quando eu clico em novo, criei um metodo apenas para isso :

public void novo() {

fabricante = new Fabricante();

}
Se sober uma melhor forma para implementar , serei grato, obrigado!

Obrigado mano consegui achar o erro , era um erro bobo, era no xhtml erro de nome de componente nem acreditei, perdi meu tempo com esse erro, fiquei um tempo sem programar meu pc estava ruim e ainda estou estudando pro vestibular, estava meio travado e sem tempo, mais agora destravou.
Mas sua dica me ajudou a identificar o verdadeiro erro.
vlw, obrigado!!

Depende da arquitetura do sistema, mas é possível fazer assim:

public void getFabricante(){
    if(fabricante == null){
        fabricante = new Fabricante();
    }

    return fabricante;
}
1 curtida

Boa ,se for nulo ele instância pra mim e retorna fabricante