GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Livro Aplicações Java para Web JSF e JPA


#1

Senhores boa tarde, estou com o seguinte erro ao tentar salvar.

HTTP Status 500 - /cadastroAutomovel.xhtml @7,64 value="#{automovelBean.automovel.marca}": Target Unreachable, identifier 'automovelBean' resolved to null
type Exception report
message /cadastroAutomovel.xhtml @7,64 value="#{automovelBean.automovel.marca}": Target Unreachable, identifier 'automovelBean' resolved to null
description The server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: /cadastroAutomovel.xhtml @7,64 value="#{automovelBean.automovel.marca}": Target Unreachable, identifier 'automovelBean' resolved to null
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:653)
root cause
javax.el.PropertyNotFoundException: /cadastroAutomovel.xhtml @7,64 value="#{automovelBean.automovel.marca}": Target Unreachable, identifier 'automovelBean' resolved to null
	com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
	com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95)
	javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030)
	javax.faces.component.UIInput.validate(UIInput.java:960)
	javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
	javax.faces.component.UIInput.processValidators(UIInput.java:698)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
	javax.faces.component.UIForm.processValidators(UIForm.java:253)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
	javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1169)
	com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:181)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:640)
root cause
javax.el.PropertyNotFoundException: Target Unreachable, identifier 'automovelBean' resolved to null
	org.apache.el.parser.AstValue.getTarget(AstValue.java:98)
	org.apache.el.parser.AstValue.getType(AstValue.java:82)
	org.apache.el.ValueExpressionImpl.getType(ValueExpressionImpl.java:172)
	com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:98)
	com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95)
	javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030)
	javax.faces.component.UIInput.validate(UIInput.java:960)
	javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
	javax.faces.component.UIInput.processValidators(UIInput.java:698)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
	javax.faces.component.UIForm.processValidators(UIForm.java:253)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
	javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1169)
	com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:181)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:640)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.37 logs.
Apache Tomcat/7.0.37

Aqui as classes

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Automovel {
	@Id
	@GeneratedValue
	private Long id;
	private String marca;
	private String modelo;
	private Integer anoFabricacao;
	private Integer anoModelo;
	private String observacoes;
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getMarca() {
		return marca;
	}
	public void setMarca(String marca) {
		this.marca = marca;
	}
	public String getModelo() {
		return modelo;
	}
	public void setModelo(String modelo) {
		this.modelo = modelo;
	}
	public Integer getAnoFabricao() {
		return anoFabricacao;
	}
	public void setAnoFabricacao(Integer anoFabricacao) {
		this.anoFabricacao = anoFabricacao;
	}
	public Integer getAnoModelo() {
		return anoModelo;
	}
	public void setAnoModelo(Integer anoModelo) {
		this.anoModelo = anoModelo;
	}
	public String getObservacoes() {
		return observacoes;
	}
	public void setObservacoes(String observacoes) {
		this.observacoes = observacoes;
	}
}

import javax.faces.bean.ManagedBean;
import javax.persistence.EntityManager;
@ManagedBean
public class AutomovelBean {
	private Automovel automovel = new Automovel();
	public Automovel getAutomovel() {
		return automovel;
	}
	public void setAutomovel(Automovel automovel) {
		this.automovel = automovel;
	}
	public void salva(){
		EntityManager em = JPAUtil.getEntityManager();
		em.getTransaction().begin();
		em.persist(automovel);
		em.getTransaction().commit();
		em.close();
	}
}

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class JPAUtil {
	private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("default");
	public static EntityManager getEntityManager(){
		return emf.createEntityManager();
	}
}

Página de cadastro

<!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">
<h:body>
<h:form>
<h:panelGrid columns="2">
Marca: <h:inputText value="#{automovelBean.automovel.marca}" /><br/>
Modelo: <h:inputText value="#{automovelBean.automovel.modelo}"/><br/>
Ano de Fabricação: <h:inputText value="#{automovelBean.automovel.anoFabricacao}"/><br/>
Ano do Modelo: <h:inputText value="#{automovelBean.automovel.anoModelo}"/><br/>
Observações: <h:inputTextarea value="#{automovelBean.automovel.observacoes}"/><br/>
<h:commandButton action="#{automovelBean.salva(automovelBean.automovel)}" value="Salvar" />
</h:panelGrid>
</h:form>
</h:body>
</html>

Agradeço a ajuda.


#2

Altere na página de cadastro

<h:commandButton action="#{automovelBean.salva(automovelBean.automovel)}" value="Salvar" />

para

<h:commandButton action="#{automovelBean.salva}" value="Salvar" />

#3

Mudei mas o erro persiste.


#4

seu managedBean necessariamente precisa implementar o serializable.


#5

Por favor, ao postar tópicos, não utilize tags óbvias como [Ajuda] ou [Dúvida].


#6

Qual a ideia de fazer isso?

<h:commandButton action="#{automovelBean.salva(automovelBean.automovel)}" value="Salvar" />

#7

É verdade,

coloque:

public class Automovel implements Serializable {

e

public class AutomovelBean implements Serializable {

#8

Explicação do livro


#9

Sua bean foi adcionada no faces-config ou você colocou alguma anotação JSF para que a aplicação entenda que ela é uma bean?


#10

Mas creio que isso funcionaria se seu método fosse public void salva(Automovel automovel)


#11

coloque a anotação @ManagedBean em sua bean e teste


#12

Eu sei que pode passar parametro,
perguntei pq
conforme seu método salva

 public void salva(){  
        EntityManager em = JPAUtil.getEntityManager();  
        em.getTransaction().begin();  
        em.persist(automovel);  
        em.getTransaction().commit();  
        em.close();  
    }

ele não recebe parametros certo?
então pra que passar lá?


#13

Ele já colocou a anotação
@ManagedBean


#14

so é necessario implementar Serializable se seu managedBean for um sessionScoped ou viewScoped ou AplicationScoped
quando se coloca apenas a anotação @ManagedBean ele é por padrão requestScoped no requestScoped não é obrigatorio implementar Serializable

agora o que vc esta tendo é o famoso nullpointeExption do jsf

que pode ocorrer se o jsf não conseguir relacionar o managedBean com a pagina ou algum atributo do managedBean que esta relacionado com o xhtml estiver nullo


#15

até onde eu pude ver esta tudo certo, tirando a chamado do salvar que o pessoal já comentou

tenta tirar o projeto do servidor de aplicação da um clean e depois adiciona o projeto novamente


#16

Olá pessoal, acho que faltou alterar o managed bean para ele corresponder à explicação da EL com parâmetro.
Você pode seguir o código de exemplo para se basear https://github.com/gscordeiro/faces-motors/blob/master/src/br/com/casadocodigo/jsfjpa/controllers/AutomovelBean.java
Ou até mesmo clonar o repositório pra já dar umas testadas.


#17

Você está visitando a página por qual endereço? Você está usando .jsf ou /faces/ ?


#18

em qual literatura está escrito isso?


#19

Estou usando esse endereço para acessar

http://localhost:8080/JSF2-JPA/faces/cadastroAutomovel.xhtml

Como faz isso mais especificamente?

Eu já clonei o projeto mas prefiro sofrer pra aprender :smiley:


#20

Corrigindo, implementar serializable so é necessario se vc configurar o jsf pra armazenar o estado da arvore de componentes no cliente.

O Que falei anteriormente é valido se vc estiver usando cdi com jsf