Target Unreachable, identifier 'LivroBean' resolved to null
value="#{LivroBean.autor.nome}": Target Unreachable, identifier 'LivroBean' resolved to null
Obrigado.
Target Unreachable, identifier 'LivroBean' resolved to null
value="#{LivroBean.autor.nome}": Target Unreachable, identifier 'LivroBean' resolved to null
Obrigado.
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.
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.