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

Erro

Target Unreachable, identifier 'LivroBean' resolved to null

value="#{LivroBean.autor.nome}": Target Unreachable, identifier 'LivroBean' resolved to null

Obrigado.

17 respostas

Opa, Syncler! Tudo certo? =)

Você poderia postar o seu código aqui? =)

Fábio

Tudo bem obrigado, segue o erro:

value="#{LivroBean.autor.nome}": Target Unreachable, identifier 'LivroBean' resolved to null

Obrigado

Syncler,

Esse erro é referente à qual curso? Qual atividade?

Fábio

Curso de EJB, @Inject bean, Eu gostaria de saber como funciona de "baixo dos panos", no livro.xhtml.

Eu alterei a EL de f:selectItem para f:inputText, mas não consegui. Não sei se esse assunto seria nesse curso, se não, poderia me indicar. Desde já obrigado.

se vc não alterou nada, a expression language ali deveria ser #{livrariaBean} com l minusculo. O padrão do JSF é pegar o nome da classe, trocar a primeira letra para minuscula e colocar no request(por isso que ficar acessível na el.)

Opa Alberto blz? Eu fiz uma confusão no forum, marquei como solução, onde não deveria, peço desculpas aos colegas instrutores.

Eu alterei apareceu outro erro.

javax.servlet.ServletException: /livros.xhtml @22,78 value="#{livroBean.autor.nome}": The class 'br.com.caelum.livraria.bean.LivroBean' does not have the property 'autor'.

Obrigado

opa, ele agora ta reclamando que o livroBean não tem o método getAutor :).

Alberto, Surgiu outro erro:

id to load is required for loading

Grato pela paciência.

Agora vc ta passando nulo para o metodo de busca do hibernate.

Fala Alberto blz?

Alterei as classes Dao's, Bean's, configuração e nada, não funcionou. A configuração é simples para rodar? Ou seria algo extenso, assunto para outro curso? Desde já obrigado.

Syncler, tudo certo? =D

Você conseguiu resolver o seu problema? Ou ainda necessita de alguma ajuda?

Fábio

Boa noite Fabio, Tudo bem? Infelizmente não consegui resolver. Grato pelo retorno.

Syncler, tudo bem, também.

Vamos lá... Qual erro está aparecendo para você?

Pode postar os seus códigos aqui para darmos uma olhada com calma? =)

Fábio

Boa noite Fábio,

Mensagem de erro no AutorDao, que não consegui tratar:

 EJB Invocation failed on component AutorDao for method public br.com.caelum.livraria.modelo.Autor br.com.caelum.livraria.dao.AutorDao.buscaPelaId(java.lang.Integer): javax.ejb.EJBException: java.lang.IllegalArgumentException: id to load is required for loading

Arquivo livro.xhtml

<?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">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">

<ui:composition template="_template.xhtml">
    <ui:define name="corpo">

        <h:form id="formLivro" prependId="false">
            <p:panelGrid columns="2">
                 <f:facet name="header">  
                    Cadastro de livros
                </f:facet>

                <p:outputLabel value="Título: " />
                <p:inputText id="titulo" value="#{livroBean.livro.titulo}"  required="true"/>

                 <p:outputLabel value="Autor: " />
                <p:inputText id="nome" value="#{livroBean.autor.nome}" required="true" />  

                <f:facet name="footer">  
                    <p:commandButton value="Salvar" action="#{livroBean.cadastra}" 
                                        update="@form :tabelaLivros :mensagens" />
                </f:facet>
            </p:panelGrid>
        </h:form>

    <p:separator id="separator"/>

    <h3>Livros</h3>

    <h:form id="tabelaLivros">
        <p:dataTable var="livro" value="#{livroBean.livros}">

            <p:column headerText="Título">
                <h:outputText value="#{livro.titulo}" />
            </p:column>

            <p:column headerText="Autor">
                <h:outputText value="#{livro.autor.nome}" />
            </p:column>

        </p:dataTable>
    </h:form>
    </ui:define>
</ui:composition>

</html>

LivroBean

 package br.com.caelum.livraria.bean;

import java.util.List;

import javax.enterprise.inject.Model;
import javax.inject.Inject;

import br.com.caelum.livraria.dao.AutorDao;
import br.com.caelum.livraria.dao.LivroDao;
import br.com.caelum.livraria.modelo.Autor;
import br.com.caelum.livraria.modelo.Livro;

@Model
public class LivroBean {

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

    @Inject
    private LivroDao livroDao;

    @Inject
    private AutorDao autorDao;

    public void cadastra() {

        Autor autor = this.autorDao.buscaPelaId(this.autorId);
        this.livro.setAutor(autor);

        this.livroDao.salva(livro);

        this.livro = new Livro();
    }

    public List<Autor> getAutores() {
        return autorDao.todosAutores();
    }

    public Livro getLivro() {
        return livro;
    }

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

    public Integer getAutorId() {
        return autorId;
    }

    public List<Livro> getLivros() {
        return this.livroDao.todosLivros();
    }

    public Autor getAutor() {
        return autor;
    }

    public void setAutor(Autor autor) {
        this.autor = autor;
    }
}

AutorDao

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;

import br.com.caelum.livraria.modelo.Autor;

@Stateless
public class AutorDao {

    @PersistenceContext
    private EntityManager manager;

    @Transactional
    public void salva(Autor autor) {
        manager.persist(autor);
    }

    public List<Autor> todosAutores() {
        return manager.createQuery("select a from Autor a", Autor.class).getResultList();
    }

    public Autor buscaPelaId(Integer autorId) {
        Autor autor = this.manager.find(Autor.class, autorId);
        return autor;
    }

}

Obrigado.

Syncler,

Como o Alberto disse acima, o ID parece estar vindo em branco (nulo). Acredito que isso esteja acontecendo quando você clica no botão para cadastrar um livro... Repare que, ao clicar, você está fazendo uma chamada para o método cadastra() do LivroBean e, a primeira coisa a se fazer dentro desse método é chamar o método buscaPelaId(), do AutorDao.

Qual exercício você estava tentando fazer, quando esse erro apareceu?

Fábio

Boa tarde Fabio,

Estava acompanhando a aula 3, quando surgiu a dúvida.

A vídeo aula está com e roda perfeitamente.

Minha duvida é: Como seria debaixo dos panos utilizando no lugar de .

Acesso com login e senha normal. mas na hora de cadastrar o livro com o nome do autor pelo inputText, aparece esse erro, e eu não sei o que fazer... rs

Obrigado.

solução!

Boa tarde Fabio,

Estava acompanhando a aula 3, quando surgiu a dúvida.

A vídeo aula está

<h:selectItems />
``` com e roda perfeitamente.

Minha duvida é: Como seria debaixo dos panos utilizando

no lugar de

. ```.

Acesso com login e senha normal. mas na hora de cadastrar o livro com o nome do autor pelo inputText, aparece esse erro, e eu não sei o que fazer... rs

Obrigado.