Erro ao chamar metodo no ManagedBean [RESOLVIDO]

17 respostas
Diego_Adriano

Galera, não estou conseguindo invocar o método para pesquisa no meu ManagedBean, ele me diz que o método não existe.
JSF

ManagedBean

public Funcao Pesquisa(Long id){
		if (this.Funcao == null){
			System.out.println("PROCURANDO FUNCAO ID");
			FuncaoRepository repository = new FuncaoRepository(this.entityManager);
			this.Funcao = repository.procura(id);
		}
		return Funcao;
	}

Erro

AVISO: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
javax.faces.el.MethodNotFoundException: javax.el.MethodNotFoundException: /Pages/funcoes/funcoes.xhtml @33,75 action="#{funcaoBean.pesquisa(id)}": Method pesquisa not found
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:92)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at filtros.JPAFilter.doFilter(JPAFilter.java:30)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at filtros.LoginFilter.doFilter(LoginFilter.java:29)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at filtros.JPAFilter.doFilter(JPAFilter.java:30)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at filtros.LoginFilter.doFilter(LoginFilter.java:29)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
	at java.lang.Thread.run(Thread.java:662)

17 Respostas

fernandogodoy18

Tente chamar o metodo em um actionListener e recuperar o id dentro do metodo,
Desta forma que vc implementou eu nunca fiz então não sei te dizer nem se funciona.

otaviojava

você colocou a anotação em seu bean ?

E

No seu método está “Pesquisa” e você está chamando “pesquisa”. Veja se não é esse o problema.

Diego_Adriano

Fernando … como seria da forma que vc falou … n entendi muito bem …
Otavio … coloquei apenas @ManagedBean … testei como request mas tive o mesmo erro …
Edu … vc novamente me abrindo os olhos cara … realmente … era isso … alterei a chamada de Pesquisa para pesquisa e solucionou o erro … porém agora tenho outro … o método não é chamado … a página é recarregada mas o evento não chega ao managedbean … o que pode ser ??
Obrigado galera.

E

Execute em modo depurador para ver se pelo menos ele chega na primeira linha do seu método. Se chegar, mesmo que null, pode ser o escopo. Aí tente mudar para @ViewScoped.
Caso nem chegar, tente colocar process=‘nomeForm’ no botão.

Kanin_Dragon

Seu método deve ser String ou void.

Diego_Adriano

Resolvi o problema da chamada do método … retirei essa parte do código
if (this.Funcao == null) … claro que o objeto esta null ainda n preenchi ele …rs … bem … agora esbarrei no problema do select …

Query query = this.entityManager.createQuery("select f from Funcao as f where f.id =:id");
		return (Funcao) query.getSingleResult();

Não sei se estou fazendo da forma correta …
Esta me retornando esse erro …

AVISO: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
javax.faces.el.EvaluationException: java.lang.IllegalArgumentException: org.hibernate.QueryException: Not all named parameters have been set: [id] [select f from Funcao as f where f.id =:id]
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
	at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:943)
	at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at filtros.LoginFilter.doFilter(LoginFilter.java:29)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at filtros.JPAFilter.doFilter(JPAFilter.java:30)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at filtros.JPAFilter.doFilter(JPAFilter.java:30)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at filtros.LoginFilter.doFilter(LoginFilter.java:29)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
	at java.lang.Thread.run(Thread.java:662)
E

Você precisa setar o valor do parâmetro id.

Algo assim. query.setParameter(“id”, id);

Diego_Adriano

Edu … alterei como vc sugeriu … minha consulta ficou da seguinte forma:

public Funcao procura(Long id){
		
		Query query = this.entityManager.createQuery("select f from Funcao as f where f.id = :id");
		query.setParameter("id",id);
		return (Funcao) query.getSingleResult();
		
	}

Porém agora ele não encontra a entidade …

GRAVE: javax.persistence.NoResultException: No entity found for query
javax.faces.el.EvaluationException: javax.persistence.NoResultException: No entity found for query
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
	at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:943)
	at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at filtros.LoginFilter.doFilter(LoginFilter.java:29)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at filtros.JPAFilter.doFilter(JPAFilter.java:30)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at filtros.JPAFilter.doFilter(JPAFilter.java:30)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at filtros.LoginFilter.doFilter(LoginFilter.java:29)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
	at java.lang.Thread.run(Thread.java:662)
Caused by: javax.persistence.NoResultException: No entity found for query
	at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:270)
	at repositorios.FuncaoRepository.procura(FuncaoRepository.java:31)
	at managedbeans.FuncaoBean.getpesquisa(FuncaoBean.java:51)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at javax.el.BeanELResolver.invokeMethod(BeanELResolver.java:737)
	at javax.el.BeanELResolver.invoke(BeanELResolver.java:467)
	at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:246)
	at com.sun.el.parser.AstValue.invoke(AstValue.java:228)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	... 46 more
E

Parece que não foi encontrada a entity Funcao. Veja se a classe foi importada no seu arquivo de configuração. (persistence.xml talvez)

Diego_Adriano

Então, pesquisando sobre esse erro descobri que é uma exception lançada qdo não é encontrado nenhum registro, e pelo fato de eu não estar tratando ela é mostrado esse erro no console.
Bem, eu coloquei a consulta dentro de um try/cath e realmente parou de exibir essa msg, porém eu tenho dados no BD … ou seja ele não esta realmente efetuando a pesquisa … mas aparentemente o select esta correto … esta como os exemplos …

E

Id é a chave primária ? Caso sim você pode fazer algo assim:

public Funcao procura(Long id) { EntityManager em = getEntityManager(); try { return em.find(Funcao.class, id); } finally { em.close(); } }

Diego_Adriano

Sim é primaria …
Bem …fiz como sugeriu …

Funcao funcao = new Funcao();
try{
Query query = (Query) this.entityManager.find(Funcao.class, id);
query.setParameter("id",id);

funcao = (Funcao) query.getSingleResult();
}

Bem eu testei colocando Println e ele chega ate o setparameter … mas n passa …
Me retorna essa exception …
GRAVE: java.lang.NullPointerException

Diego_Adriano

Edu … consegui resolver o problema … em partes …a consulta ficou assim

Porém pelo fato de ter retornado null setei um valor para o ida … dentro da busca … e ele retornou a consulta … corretamente …
Então percebi que o valor não esta vindo da página …
Então tem algo errado nessa parte …

<h:outputLabel value="ID: " for="id"/> 
<h:inputText id="id" 
value="#{funcaoBean.funcao.id}"> 
</h:inputText> 

<h:outputLabel value="Nome: " for="nome"/> 
<h:inputHidden id="nome" 
value="#{funcaoBean.funcao.nome}"> 
</h:inputHidden> 

<h:commandButton value="Pesquisar" action="#{funcaoBean.pesquisa(id)}"/>

Bem … no meu Login passo um OBJETO do tipo LOGIN para o Bean … contendo o USUARIO E SENHA … sera que eu deveria passar um OBJETO de FUNCAO para o meu bean ???

E

Para teste crie um método pesquisa sem parâmetro. Não instancie novamente o objeto. Pegue o objeto funcao do seu bean que está sendo usado no form. Ficaria algo assim:

try{
Query query = (Query) this.entityManager.find(Funcao.class, funcao.getId());
query.setParameter("id",id);

funcao = (Funcao) query.getSingleResult();
}
Diego_Adriano

Então Edu … verifiquei em modo debug e o formulario não passa o id para o managedBean … já tentei passar o id … já tentei passar o obj todo e n funiona … ms o metodo de adicionar recebe normalmente …

Diego_Adriano

Bem, alterei novamente meu codigo … porem tive o mesmo problema … o xtml não passa o valor para Bean …
Sera que alguem pode me ajduar ??

<h:form>
					<h:outputLabel value="ID: " for="funcaoid"/>
					<h:inputText id="funcaoid"
								value="#{funcaoBean.funcaoID}">
					</h:inputText>
					
					<h:outputLabel value="Nome: " for="nome"/>
					<h:inputText id="nome"
								value="#{funcaoBean.funcao.nome}">
					</h:inputText>
					
					
					<h:commandButton value="Salvar" action="#{funcaoBean.getpesquisa}" immediate="true"/>
  								
				
			</h:form>

Bean

public class FuncaoBean {

	@ManagedProperty(value = "#{entityManager}")
	private EntityManager entityManager;
	private Funcao Funcao = new Funcao();
	private List<Funcao> Funcoes;
	private Funcao funcaoSelecionada;
	private Funcao[] listfuncaoSelecionada;
	private Long funcaoID;
	
	public Funcao getpesquisa(){

			System.out.println("PROCURANDO FUNCAO ID"+" "+funcaoID);//COLOQUEI PARA VERIFICAR SE RECEBIA ALGO
			
                        FuncaoRepository repository = new FuncaoRepository(this.entityManager);
			this.Funcao = repository.procura(this.funcaoID);
	
	        	System.out.println("NOme "+" "+Funcao.getNome()); COLOQUEI PARA VERIFICAR SE HAVIA ALGUM RETORNO
		return this.Funcao;
	}

Visivelmente não há erros com o código …

Criado 8 de março de 2011
Ultima resposta 14 de mar. de 2011
Respostas 17
Participantes 5