Estou com um problema na chamada de um método ManagedBean por uma página xhtml
O que não entendo é que tenho duas Entidades que tem praticamente o mesmo código: uma está funcionado a outra não!
vamos lá!
Endereco(Entidade que está funcionado)
no formulário de cadastro o commandButton chamando o método adiciona
<h:commandButton value="Cadastrar">
<f:ajax event="click" execute="@form"
listener="#{enderecoBean.adiciona}" render="@all"/>
</h:commandButton>
no ManagedBean de Endereco(Entidade que está funcionado):
@ManagedBean
public class EnderecoBean {
private Endereco endereco = new Endereco();
private List<Endereco> listaEndereco;
public Endereco getEndereco() {
return endereco;
}
public void setEndereco(Endereco endereco) {
this.endereco = endereco;
}
public List<Endereco> getListaEndereco() {
if (this.listaEndereco == null) {
EntityManager manager = this.getManager();
EnderecoRepositorio repositorio = new EnderecoRepositorio(manager);
this.listaEndereco = repositorio.getLista();
}
return this.listaEndereco;
}
public void setListaEndereco(List<Endereco> enderecos) {
this.listaEndereco = enderecos;
}
public void adiciona() {
EntityManager manager = this.getManager();
EnderecoRepositorio repositorio = new EnderecoRepositorio(manager);
if (this.endereco.getCodEndereco() == null) {
repositorio.adiciona(this.endereco);
} else {
repositorio.atualiza(this.endereco);
}
this.endereco = new Endereco();
this.listaEndereco = null;
}
Agora o problema:
Filhos Não Funciona:
<h:commandButton value="Cadastrar" styleClass="botao-formulario">
<f:ajax event="click" execute="@form"
listener="#{filhosBean.adiciona}" render="@form"/> //Chamada do Método!
</h:commandButton>
Filhos ManagedBean:
@ManagedBean
public class FilhosBean {
private Filhos filhos = new Filhos();
private Integer codigoPais;
private List<Filhos> listaFilhos;
public Filhos getFilhos() {
return filhos;
}
public void setFilhos(Filhos filho) {
this.filhos = filho;
}
public Integer getCodigoPais() {
return codigoPais;
}
public void setCodigoPais(Integer codigoPais) {
this.codigoPais = codigoPais;
}
public List<Filhos> getListaFilhos() {
if (this.listaFilhos == null) {
EntityManager manager = this.getManager();
FilhosRepositorio repository = new FilhosRepositorio(manager);
this.listaFilhos = repository.getLista();
}
return this.listaFilhos;
}
public void setListaFilhos(List<Filhos> filhos) {
this.listaFilhos = filhos;
}
public void adiciona() { // Olha o Método Aqui!
EntityManager manager = this.getManager();
PaisRepositorio paisRepositorio = new PaisRepositorio(manager);
FilhosRepositorio filhosRepositorio = new FilhosRepositorio(manager);
if (this.codigoPais != null) {
Pais pai = paisRepositorio.procura(this.codigoPais);
this.filhos.setPais(pai);
}
if (this.filhos.getCodFilho() == null) {
filhosRepositorio.adiciona(filhos);
} else {
filhosRepositorio.atualiza(filhos);
}
this.filhos = new Filhos();
this.listaFilhos = null;
}
Exceção levantada: Property 'adiciona' not found on type br.com.catenna.controle.managedbean.filhos.FilhosBean
ou seja, não encontra o método no Managedbean mesmo estando lá!
detalhe: alterei a chamada para: filhosBean.adiciona() e não resolveu!
Debudo pra ver se realmente entra no método?
Tem um projeto que participo, que as vezes gera esse erro, porém, o método foi encontrado e acessado, só que um NullPointer ou algo dentro do método é mascara por esse mesmo erro que aconteceu contigo.
Não está entrando no ManagedBean:
stacktrace:
exception
javax.servlet.ServletException: /formulario-novos-filhos.xhtml: Property 'adiciona' not found on type br.com.catenna.controle.managedbean.filhos.FilhosBean
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
br.com.catenna.controle.filtro.JPAFilter.doFilter(JPAFilter.java:47)
br.com.catenna.controle.filtro.ControleAcesso.doFilter(ControleAcesso.java:28)
root cause
javax.el.ELException: /formulario-novos-filhos.xhtml: Property 'adiciona' not found on type br.com.catenna.controle.managedbean.filhos.FilhosBean
com.sun.faces.facelets.compiler.AttributeInstruction.write(AttributeInstruction.java:94)
com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:82)
com.sun.faces.facelets.compiler.UILeaf.encodeAll(UILeaf.java:207)
javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:885)
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:447)
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)
br.com.catenna.controle.filtro.JPAFilter.doFilter(JPAFilter.java:47) // acessa o filtro
br.com.catenna.controle.filtro.ControleAcesso.doFilter(ControleAcesso.java:28) // acessa o filtro
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.29 logs.
Pessoal estou precisando de ajudar: Porque o método não é reconhecido pela view?
Humm… que estranho heim…
Pior que o ManagedBean tá configurado certinho né? = /
[quote=Alexsandro Lopes]Estou com um problema na chamada de um método ManagedBean por uma página xhtml
O que não entendo é que tenho duas Entidades que tem praticamente o mesmo código: uma está funcionado a outra não!
vamos lá!
Endereco(Entidade que está funcionado)
no formulário de cadastro o commandButton chamando o método adiciona
<h:commandButton value="Cadastrar">
<f:ajax event="click" execute="@form"
listener="#{enderecoBean.adiciona}" render="@all"/>
</h:commandButton>
no ManagedBean de Endereco(Entidade que está funcionado):
@ManagedBean
public class EnderecoBean {
private Endereco endereco = new Endereco();
private List<Endereco> listaEndereco;
public Endereco getEndereco() {
return endereco;
}
public void setEndereco(Endereco endereco) {
this.endereco = endereco;
}
public List<Endereco> getListaEndereco() {
if (this.listaEndereco == null) {
EntityManager manager = this.getManager();
EnderecoRepositorio repositorio = new EnderecoRepositorio(manager);
this.listaEndereco = repositorio.getLista();
}
return this.listaEndereco;
}
public void setListaEndereco(List<Endereco> enderecos) {
this.listaEndereco = enderecos;
}
public void adiciona() {
EntityManager manager = this.getManager();
EnderecoRepositorio repositorio = new EnderecoRepositorio(manager);
if (this.endereco.getCodEndereco() == null) {
repositorio.adiciona(this.endereco);
} else {
repositorio.atualiza(this.endereco);
}
this.endereco = new Endereco();
this.listaEndereco = null;
}
Agora o problema:
Filhos Não Funciona:
<h:commandButton value="Cadastrar" styleClass="botao-formulario">
<f:ajax event="click" execute="@form"
listener="#{filhosBean.adiciona}" render="@form"/> //Chamada do Método!
</h:commandButton>
Filhos ManagedBean:
@ManagedBean
public class FilhosBean {
private Filhos filhos = new Filhos();
private Integer codigoPais;
private List<Filhos> listaFilhos;
public Filhos getFilhos() {
return filhos;
}
public void setFilhos(Filhos filho) {
this.filhos = filho;
}
public Integer getCodigoPais() {
return codigoPais;
}
public void setCodigoPais(Integer codigoPais) {
this.codigoPais = codigoPais;
}
public List<Filhos> getListaFilhos() {
if (this.listaFilhos == null) {
EntityManager manager = this.getManager();
FilhosRepositorio repository = new FilhosRepositorio(manager);
this.listaFilhos = repository.getLista();
}
return this.listaFilhos;
}
public void setListaFilhos(List<Filhos> filhos) {
this.listaFilhos = filhos;
}
public void adiciona() { // Olha o Método Aqui!
EntityManager manager = this.getManager();
PaisRepositorio paisRepositorio = new PaisRepositorio(manager);
FilhosRepositorio filhosRepositorio = new FilhosRepositorio(manager);
if (this.codigoPais != null) {
Pais pai = paisRepositorio.procura(this.codigoPais);
this.filhos.setPais(pai);
}
if (this.filhos.getCodFilho() == null) {
filhosRepositorio.adiciona(filhos);
} else {
filhosRepositorio.atualiza(filhos);
}
this.filhos = new Filhos();
this.listaFilhos = null;
}
Exceção levantada: Property 'adiciona' not found on type br.com.catenna.controle.managedbean.filhos.FilhosBean
ou seja, não encontra o método no Managedbean mesmo estando lá!
detalhe: alterei a chamada para: filhosBean.adiciona() e não resolveu!
[/quote]
Foi falta de atenção na criação das EL,Facelets,JSTL.
Tinha espaços após a abertura das aspas. então só foi retirar esses espaços.
Antes:
//espaços após a abertura das aspas
xmlns:ui=" http://java.sun.com/jsf/facelets"
xmlns:h=" http://java.sun.com/jsf/html"
xmlns:f=" http://java.sun.com/jsf/core">
Depois:
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
Putz, e a gente batendo cabeça. hehe
Que bom que resolveu Alexsandro.