[RESOLVIDO] Problema na chamada de um método do ManagedBean

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é? = /

Ajuda aqui galera!

[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. :wink: