Boa tarde galera,
Sou iniciante em jsf e jpa e estou tentando praticar alguns exercícios de um curso o qual tenho feito. A minha dúvida seria a seguinte, tenho um formulário xhtml o qual devo preencher o nome do fabricante de um carro e após clicar no botão “Salvar” ele deverá fazer a persistência e salvar a informação no banco de dados, porem isso não tem ocorrido, toda vez que clico no botão é exibido uma mensagem contida na minha exception, a qual deverá ser executada caso eu deixe o campo “fabricante” em branco, como eu coloquei um system.out.println contido dentro desse metodo “salvar”, vejo que o retorno do meu bean tem sido null. Tentei verificar se poderia ser algo relacionado ao escopo que estou usando, porem mesmo alterando não consegui obter resultados. segue o meu código abaixo, qualquer ajuda já será de grande valia.
XHTML
<ui:composition template="/WEB-INF/template/LayoutPadrao.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:o="http://omnifaces.org/ui">
<ui:define name="titulo">Novo fabricante</ui:define>
<ui:define name="corpo">
<f:metadata>
<!--
<o:viewParam name="fabricante" value="#{cadastroFabricanteBean.fabricante}" />
-->
</f:metadata>
<h1>Novo fabricante</h1>
<h:form id="frmCadastro">
<p:messages id="messages" autoUpdate="true" closable="true" />
<p:toolbar style="margin-top: 20px">
<p:toolbarGroup>
<p:commandButton process="@this" value="Salvar" id="botaoSalvar" action="#{cadastroFabricanteBean.salvar}" update="frmCadastro"/>
</p:toolbarGroup>
<p:toolbarGroup align="right">
<p:button value="Pesquisa" />
</p:toolbarGroup>
</p:toolbar>
<p:panelGrid columns="2" id="painel" style="width: 100%; margin-top: 20px"
columnClasses="rotulo, campo">
<p:outputLabel value="Código" for="codigo"/>
<p:inputText id="codigo" size="20" maxlength="20" value="#{cadastroFabricanteBean.fabricante.codigo}" readonly="true"/>
<p:outputLabel value="Nome" for="nome"/>
<p:inputText id="nome" size="60" maxlength="80" value="#{cadastroFabricanteBean.fabricante.nome}"/>
</p:panelGrid>
</h:form>
</ui:define>
</ui:composition>
BEAN
package com.algaworks.curso.jpa2.controller;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import jpa2.modelo.Fabricante;
import jpa2.service.CadastroFabricanteService;
import jpa2.service.NegocioException;
import jpa2.util.jsf.FacesUtil;
@ManagedBean(name = "cadastroFabricanteBean")
@Named
@ViewScoped
public class cadastroFabricanteBean implements Serializable {
@Inject
private CadastroFabricanteService cadastroFabricanteService;
private Fabricante fabricante;
/*
* setters and getters
*/
public Fabricante getFabricante() {
return fabricante;
}
public void setFabricante(Fabricante fabricante) {
this.fabricante = fabricante;
System.out.println("O nome do fabricante é " + fabricante.getNome());
}
// esse metodo é chamado toda vez que o bean é criado
@PostConstruct
public void init() {
this.Limpar();
System.out.println("Inicalizou a classe cadastroFabricanteBean");
}
public void Limpar() {
this.fabricante = new Fabricante();
}
public void salvar() {
try {
this.cadastroFabricanteService.Salvar(fabricante);
FacesUtil.addSuccessMessage("Fabricante salvo com sucesso");
}
catch(NegocioException e) {
FacesUtil.addErrorMessage(e.getMessage());
System.out.println("O nome do fabricante é " + fabricante.getNome());
}
}
}
SERVICE, o qual recebe as informações vindo da minha bean
public class CadastroFabricanteService implements Serializable {
@Inject
private FabricanteDAO fabricanteDao;
public void Salvar(Fabricante f) throws NegocioException {
if(f.getNome() == null || f.getNome().trim().equals("")) {
throw new NegocioException("O nome do fabricante é obrigatório");
}
this.fabricanteDao.Salvar(f);
}
}
MINHA EXCEPTION, chamada quando o campo “fabricante” estiver em branco
`
public class NegocioException extends Exception {
public NegocioException(String message) {
super(message);
}
}
DAO, a qual fará a persistência salvando no banco
public class FabricanteDAO implements Serializable {
@Inject
private EntityManager em;
public void Salvar(Fabricante f) {
em.getTransaction().begin();
em.persist(f);
em.getTransaction().commit();
}
}
Quando digito o nome do fabricante e clico no botão “salvar”, ele dá a mensagem referente a exception e meu system.out.println retorna que o fabricante é null.
Desde já agradeço por qualquer ajuda.
, mudei um pouco a lógica de instancia do fabricante. tente vê se funciona