Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro na hora que carrega o arquivo Livro.xhtml - ="#{livroBean.autorId}": Property 'autorId' not found on type br.com.caelum.livraria.bean.livroBean

Bom dia galera,

Não estou entendendo, após ter inserido as informações do exercicio para exibir a lista dos autores do selectOneMenu no meu arquivo Livro.xhtml, começou a exibir esse erro:

HTTP Status 500 - /Livro.xhtml @36,66 value="#{livroBean.autorId}": Property 'autorId' not found on type br.com.caelum.livraria.bean.livroBean

type Exception report

message /Livro.xhtml @36,66 value="#{livroBean.autorId}": Property 'autorId' not found on type br.com.caelum.livraria.bean.livroBean

description The server encountered an internal error that prevented it from fulfilling this request.

exception javax.servlet.ServletException: /Livro.xhtml @36,66 value="#{livroBean.autorId}": Property 'autorId' not found on type br.com.caelum.livraria.bean.livroBean javax.faces.webapp.FacesServlet.service(FacesServlet.java:606) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause javax.el.PropertyNotFoundException: /Livro.xhtml @36,66 value="#{livroBean.autorId}": Property 'autorId' not found on type br.com.caelum.livraria.bean.livroBean com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111) javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) javax.faces.component.UIOutput.getValue(UIOutput.java:169) com.sun.faces.renderkit.html_basic.MenuRenderer.getCurrentSelectedValues(MenuRenderer.java:647) com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:748) com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:843) com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:297) javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786) javax.faces.render.Renderer.encodeChildren(Renderer.java:168) javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779) javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782) javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782) com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:437) com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:124) com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

note The full stack trace of the root cause is available in the Apache Tomcat/8.0.32 logs.

Sendo que minha estrutura está toda certinha, tenho as minhas classes Livro, Autor, livroBean e autorBean dentro de br.com.caelum.livraria.bean

Minha classe livroBean está como se pede no exercicio.

package br.com.caelum.livraria.bean;

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

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

import br.com.caelum.livraria.dao.DAO; import br.com.caelum.livraria.bean.Autor; import br.com.caelum.livraria.bean.Livro;

@ManagedBean @ViewScoped public class livroBean implements Serializable {

private Livro livro = new Livro(); private Integer autorId;

public void setAutorId(Integer autorId) { this.autorId = autorId; }

public Integer getAutorId() { return autorId; }

public Livro getLivro() { return livro; }

public List getLivros() { return new DAO(Livro.class).listaTodos(); }

public List getAutores() { return new DAO(Autor.class).listaTodos(); }

public List getAutoresDoLivro() { return this.livro.getAutores(); }

public void adicionarAutor() {

Autor autor = new DAO(Autor.class).buscaPorId(this.autorId); System.out.println("Usando autor " + autor.getNome()); this.livro.adicionaAutor(autor); }

public void gravar() { System.out.println("Gravando livro " + this.livro.getTitulo());

if (livro.getAutores().isEmpty()) { throw new RuntimeException("Livro deve ter pelo menos um Autor."); }

new DAO(Livro.class).adiciona(this.livro); }

}

E meu arquivo Livro.xhtml está da seguinte forma:

<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

Novo Livro

Dados do Livro

Dados do Autor

Não consegui compreender aonde pode estar o erro, desde já agradeço por qualquer ajuda.

3 respostas

Oi Bruno,

Confira se no seu xhtml o código da combo-box está assim:

<h:selectOneMenu value="#{livroBean.autorId}" id="autor">
    <f:selectItems value="#{livroBean.autores}" var="autor" itemLabel="#{autor.nome}" itemValue="#{autor.id}"/>
</h:selectOneMenu>

E se no seu ManagedBean tem a nova propriedade autorId, juntamente com o getter e setter:

@ManagedBean
@ViewScoped
public class LivroBean {

    private Integer autorId;

    public void setAutorId(Integer autorId) {
        this.autorId = autorId;
    }
    public Integer getAutorId() {
        return autorId;
    }

    //restante do código...

Pela mensagem de exception, o problema é que o JSF não encontrou o atributo autorId no ManagedBean, mas no seu código vi que você adicionou o atributo juntamente com o get/set.

Talvez seja questão de reiniciar o servidor no eclipse e testar novamente.

Veja se resolve reiniciando.

Abraços!

solução!

Bom dia,

Agora começou a exibir outra mensagem de erro toda vez que tento carregar o meu formulário em .xhtml, para poder exibir e tentar salvar dados no meu banco. Esse seria o erro.

HTTP Status 500 - Internal Server Error type Exception report messageInternal Server Error descriptionThe server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException root cause

java.lang.ExceptionInInitializerError root cause

javax.persistence.PersistenceException: No Persistence provider for EntityManager named livrariadb

O estranho é que executando o arquivo "PopulaBanco" dos exercicios anteriores , eu consigo criar as tabelas, e inserir os dados no banco normalmente.

Segue abaixo o conteúdo do meu persistence.xml

org.hibernate.ejb.HibernatePersistence

br.com.caelum.livraria.modelo.Livro br.com.caelum.livraria.modelo.Autor

Segue o arquivo .xhtml referente a última aula:

<?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">

Novo Livro

Dados do Livro

Dados do Autor

O meu arquivo persistence.xml está dentro da pasta "Livraria >>> src >>> META-INF". Estou utilizando a Ide Netbeans.

Desde já agradeço por qualquer ajuda dos colegas.

Desculpe, como esqueci de formatar o código, segue abaixo o meu persistence.xml:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
  http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
  version="2.0">

  <persistence-unit name="livrariadb" transaction-type="RESOURCE_LOCAL">

  <provider>org.hibernate.ejb.HibernatePersistence</provider>

  <class>br.com.caelum.livraria.modelo.Livro</class>
  <class>br.com.caelum.livraria.modelo.Autor</class>

  <properties>
    <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
    <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3310/livrariadb"/>
    <property name="javax.persistence.jdbc.user" value="root"/>
    <property name="javax.persistence.jdbc.password" value="vivi2012"/>

    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
    <property name="hibernate.hbm2ddl.auto" value="update" />  
    <property name="hibernate.show_sql" value="true" />
    <property name="hibernate.format_sql" value="true" />
  </properties>

</persistence-unit>

``

<?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">

Novo Livro

Dados do Livro

Dados do Autor

``