Ao acessar a pagina livro,xhtml gera uma ecexeção: /livro.xhtml: Property 'carregarLivroPelaId' not found on type br.com.caelum.livraria.bean.LivroBean Porém esse método existe no LivroBean. Como posso corrigir esse problema? Obrigado pela atenção
Ao acessar a pagina livro,xhtml gera uma ecexeção: /livro.xhtml: Property 'carregarLivroPelaId' not found on type br.com.caelum.livraria.bean.LivroBean Porém esse método existe no LivroBean. Como posso corrigir esse problema? Obrigado pela atenção
Oi Luan,
A exception parece bem clara.. o método, do jeito que vc está referenciando, não está sendo achado pelo JSF. Pode colocar o seu código aqui? Pq parece que vc referenciou esse método em um lugar que o jsf ta esperando achar um getter para ele.
Também entendi assin, o problema que não entendi é que esse método existe. LivroBean: package br.com.caelum.livraria.bean;
import java.io.Serializable; import java.util.List;
import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.validator.ValidatorException;
import br.com.caelum.livraria.dao.DAO; import br.com.caelum.livraria.modelo.Autor; import br.com.caelum.livraria.modelo.Livro;
@ManagedBean @ViewScoped public class LivroBean implements Serializable {
private static final long serialVersionUID = 1L;
private Livro livro = new Livro();
private Integer autorId;
private Integer livroId;
public void setAutorId(Integer autorId) { this.autorId = autorId; }
public Integer getAutorId() { return autorId; }
public Livro getLivro() { return livro; }
public Integer getLivroId() { return livroId; }
public void setLivroId(Integer livroId) { this.livroId = livroId; }
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 gravarAutor() { Autor autor = new DAO(Autor.class).buscaPorId(this.autorId); this.livro.adicionaAutor(autor); System.out.println("Escrito por: " + autor.getNome()); }
public void gravar() { System.out.println("Gravando livro " + this.livro.getTitulo());
if (livro.getAutores().isEmpty()) { FacesContext.getCurrentInstance().addMessage("autor", new FacesMessage("Livro deve ter pelo menos um Autor.")); return; }
if (this.livro.getId() == null) { new DAO(Livro.class).adiciona(this.livro); } else { new DAO(Livro.class).atualiza(this.livro); }
this.livro = new Livro(); }
public void carregar(Livro livro) { System.out.println("Carregando livro " + livro.getTitulo()); this.livro = livro; }
public void remover(Livro livro) { System.out.println("Removendo livro " + livro.getTitulo()); new DAO(Livro.class).remove(livro); }
public void removerAutorDoLivro(Autor autor) { this.livro.removeAutor(autor); }
public String formAutor() { System.out.println("Chamanda do formulário do Autor."); return "autor?faces-redirect=true"; }
public void comecaComDigitoUm(FacesContext fc, UIComponent component, Object value) throws ValidatorException {
String valor = value.toString(); if (!valor.startsWith("1")) { throw new ValidatorException(new FacesMessage( "ISBN deveria começar com 1")); }
}
public void carregarLivroPelaId() { this.livro = new DAO(Livro.class).buscaPorId(livroId); }
} livro.xmhtl:
<?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
Título ISBN Preço Data Alterar Remover
O método pode existir, mas vc referenciou ele de um jeito que o jsf está achando que vc talvez esteja procurando por um getter e não pelo método em si.
e qual seria a maneira correta de chamar o método?
Depende, posta seu código. Se vc tiver referenciando o método numa action de uma botão, deveria ser do jeito que vc ta fazendo. Se vc tiver referenciando num value de um input, aí tem que ser sem () e precisa ter o getter e setter.
o bean: package br.com.caelum.livraria.bean;
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.modelo.Autor;
@ManagedBean @ViewScoped public class AutorBean {
private Autor autor = new Autor();
private Integer autorId;
public Autor getAutor() { return autor; }
public List getAutores() { return new DAO(Autor.class).listaTodos(); }
public void gravar() { System.out.println("Gravando autor " + this.autor.getNome());
if (this.autor.getId() == null) { new DAO(Autor.class).adiciona(this.autor); } else { new DAO(Autor.class).atualiza(this.autor); }
this.autor = new Autor();
//return "livro?faces-redirect=true"; }
public void carregar(Autor autor) { System.out.println("Carregando autor"); this.autor = autor; }
public void remover(Autor autor) { System.out.println("Removendo autor"); new DAO(Autor.class).remove(autor); }
public Integer getAutorId() { return autorId; }
public void setAutorId(Integer autorId) { this.autorId = autorId; }
public void carregarAutorPelaId() { this.autor = new DAO(Autor.class).buscaPorId(autorId); } }
e a pagina: <?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 Autor
Dados do Autor
Nome Alterar Remover