Problema com método que não é enxergado em JSF

7 respostas
V

Se um dia eu já pedi algo aqui, agora eu estou implorando!

Eu simplesmente não acho o erro nesse código nem à custa de reza braba!

POR FAVOR, se alguém puder me ajudar, agradeço muito! Estou aprendendo JSF sozinho e estou levando um tombo atrás do outro!

javax.servlet.ServletException: /testeParamRoot.xhtml @37,94 actionListener="#{param.obtem}": Method not found: {formParamRoot=formParamRoot, com.sun.faces.VIEW=H4sIAAAAAAAAAKVWzW8bRRQfO3G+SNs0adNAiXASBFRK1nFwSWlaqFMn2KpNQuJGtBySyXpsb7reWWZn7Q1VIzhwAQkhVSAhBYHEFS7wFyAOSJUKIlIvIG5ICIkPiQsfF3hvvf6MnRQxh7ezM2/e+83vfex+/AsJWIIEVV5QLNtQslRllmJLTVfSgrFVKWxV2oKdyJ6OPfzORtBPOpOkR81rekYwQ5KTyS1apCE8EIoKQbeTmiXnkqRX1allPU8LTJLBso5OjVwIDGpGDhS60JO0JBmqsxCnVj5FTdj2a5mXyQ7xOyagG0KNMqiqD+e1vdH3vqTvdxBfgnRa2ivMMQkh/lInyD4LDxNXBppXTUkm0aDjXRaubnIDLqPkZUFX4iAu80KBGpl5W0pugH7PJpeUp6nuWUDZB+sBd92RZOIQg4tcFED/SBaey1TQwgrnsgmkrwnkmUNsLtnStGWaORKUO9e1TNjBo0e9t2mA9QQXOYVuUSeyZWWVLPhlJS5uuEtKFMSaxkoIBc70rhe9FxsYf8mNioIxU5Y2t5gq597+6sUPBqwzup+QMtU2uhtpmHVWZz0Qt+O1uHmRDXR/+/kXwxvfdBD/IunTOc0sUlVykSC9Mi+Yled6xjGfvURw9Jd6QA7g1GkAiD5OVe27GOc51xk17gbFq/d2//7VT3zXSaBIdRvSwudSGiQmGOmLp1PJ9fnoauIyJG9IMkuyakAUB8kFwwM14EmuUp3t/Hl8Y3f6r58h/ROkJw+XUXmGJUm3ym1Dim03V6EwEItNc8x77y5SoVFDeqn8DwxJ/PMrIEwpCamyFcDJuCvM2rQFwbXZcB3VOBvdx5pfkpH6utah3pRUdOXKeiImyamWl5+ItDoUXV5OJhZiwExo355WMHUlxrLU1uViefHRqGnq22l+gxnx3a9jc8a7H/ZjDEsPkQHwCgeoZDNlh5D3Y/dK3zmOs68+8FbHUIy5bMhyWCoV4ZaUiTEdo+BOU6nUuBFypkql0hTambKFzgyMU8ZsHgcyO1qddR3KcQcuT7dl86wkXZCFXIQlFKbgJhNyew3TMlzZmWnemUEmhhuYOF/pP+jtgXpKBusp8foVtszHWjePVQnMx6HImFilRSau3fns4u3duyk/ZmutZ3vp22eBTsY909jFvY7guK4e35cSDMqG5ai6nWIyzzPzmpGBpk/Kwwe1mSS+giSnXYtOiOmhsuKCY0IPsCCMc05by2maa9auWMYkE+TB8tVBtVnv09CdN3/4I/KW39UbqurVND56/Y3V36/vXXB7HCB4pIKghbUE5PH3Kzvn+q/d/g09I2nJ0iA5OnHTxMApfBNy/RZUeVM/9b6Bn+yt/fjT6M3nKv3UJ8lofdRYESMWVTGtF3Bumk7pGXKhZaYFLz05O/l0JEhddfxAMoOJi+ONWMadWnOBaluCRRFcwyxkFlRFXRNqGo07kLqWvVnQZLU8yP8sI9/BZXQOS2KoRUngsSO1ekARM10fC+VH3JVXXLlUmiDHKoQUuCUFveW1+rq4uFhfQHjI9yw524bvyMzkbNjju8azZ3bcMeuZ7kq5y/+BYpxcPZDe++j/HqkjrUkNT+P+DIqIU/lpwLeTjYQ+VcEz276N+loArEW9477j3w5quPwDAADP448Oap9o+2Vwf4nwQleZSWta9XjJvy8MRS34CgAA, formParamRoot:botaoTal=Obter Valores}.obtem(javax.faces.event.ActionEvent)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)


root cause 

javax.faces.el.MethodNotFoundException: /testeParamRoot.xhtml @37,94 actionListener="#{param.obtem}": Method not found: {formParamRoot=formParamRoot, com.sun.faces.VIEW=H4sIAAAAAAAAAKVWzW8bRRQfO3G+SNs0adNAiXASBFRK1nFwSWlaqFMn2KpNQuJGtBySyXpsb7reWWZn7Q1VIzhwAQkhVSAhBYHEFS7wFyAOSJUKIlIvIG5ICIkPiQsfF3hvvf6MnRQxh7ezM2/e+83vfex+/AsJWIIEVV5QLNtQslRllmJLTVfSgrFVKWxV2oKdyJ6OPfzORtBPOpOkR81rekYwQ5KTyS1apCE8EIoKQbeTmiXnkqRX1allPU8LTJLBso5OjVwIDGpGDhS60JO0JBmqsxCnVj5FTdj2a5mXyQ7xOyagG0KNMqiqD+e1vdH3vqTvdxBfgnRa2ivMMQkh/lInyD4LDxNXBppXTUkm0aDjXRaubnIDLqPkZUFX4iAu80KBGpl5W0pugH7PJpeUp6nuWUDZB+sBd92RZOIQg4tcFED/SBaey1TQwgrnsgmkrwnkmUNsLtnStGWaORKUO9e1TNjBo0e9t2mA9QQXOYVuUSeyZWWVLPhlJS5uuEtKFMSaxkoIBc70rhe9FxsYf8mNioIxU5Y2t5gq597+6sUPBqwzup+QMtU2uhtpmHVWZz0Qt+O1uHmRDXR/+/kXwxvfdBD/IunTOc0sUlVykSC9Mi+Yled6xjGfvURw9Jd6QA7g1GkAiD5OVe27GOc51xk17gbFq/d2//7VT3zXSaBIdRvSwudSGiQmGOmLp1PJ9fnoauIyJG9IMkuyakAUB8kFwwM14EmuUp3t/Hl8Y3f6r58h/ROkJw+XUXmGJUm3ym1Dim03V6EwEItNc8x77y5SoVFDeqn8DwxJ/PMrIEwpCamyFcDJuCvM2rQFwbXZcB3VOBvdx5pfkpH6utah3pRUdOXKeiImyamWl5+ItDoUXV5OJhZiwExo355WMHUlxrLU1uViefHRqGnq22l+gxnx3a9jc8a7H/ZjDEsPkQHwCgeoZDNlh5D3Y/dK3zmOs68+8FbHUIy5bMhyWCoV4ZaUiTEdo+BOU6nUuBFypkql0hTambKFzgyMU8ZsHgcyO1qddR3KcQcuT7dl86wkXZCFXIQlFKbgJhNyew3TMlzZmWnemUEmhhuYOF/pP+jtgXpKBusp8foVtszHWjePVQnMx6HImFilRSau3fns4u3duyk/ZmutZ3vp22eBTsY909jFvY7guK4e35cSDMqG5ai6nWIyzzPzmpGBpk/Kwwe1mSS+giSnXYtOiOmhsuKCY0IPsCCMc05by2maa9auWMYkE+TB8tVBtVnv09CdN3/4I/KW39UbqurVND56/Y3V36/vXXB7HCB4pIKghbUE5PH3Kzvn+q/d/g09I2nJ0iA5OnHTxMApfBNy/RZUeVM/9b6Bn+yt/fjT6M3nKv3UJ8lofdRYESMWVTGtF3Bumk7pGXKhZaYFLz05O/l0JEhddfxAMoOJi+ONWMadWnOBaluCRRFcwyxkFlRFXRNqGo07kLqWvVnQZLU8yP8sI9/BZXQOS2KoRUngsSO1ekARM10fC+VH3JVXXLlUmiDHKoQUuCUFveW1+rq4uFhfQHjI9yw524bvyMzkbNjju8azZ3bcMeuZ7kq5y/+BYpxcPZDe++j/HqkjrUkNT+P+DIqIU/lpwLeTjYQ+VcEz276N+loArEW9477j3w5quPwDAADP448Oap9o+2Vwf4nwQleZSWta9XjJvy8MRS34CgAA, formParamRoot:botaoTal=Obter Valores}.obtem(javax.faces.event.ActionEvent)
	com.sun.facelets.el.LegacyMethodBinding.invoke(LegacyMethodBinding.java:71)
	javax.faces.component.UICommand.broadcast(UICommand.java:305)
	org.ajax4jsf.framework.ajax.AjaxViewRoot.processEvents(AjaxViewRoot.java:180)
	org.ajax4jsf.framework.ajax.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:158)
	org.ajax4jsf.framework.ajax.AjaxViewRoot.processApplication(AjaxViewRoot.java:346)
	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)

Códigos:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!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:t="http://myfaces.apache.org/tomahawk"
      xmlns:c="http://java.sun.com/jstl/core">
      
  

	
    <ui:composition template="./template2.xhtml">
 
       <h:messages globalOnly="true" />       
        <ui:define name="menuAtributo">
        	<ul>
        		<li>Cadastro de País</li>
        	</ul>
        
        </ui:define>
        
        <ui:define name="conteudoAtributo">
        
	        
        <div style="overflow:auto; height:300px;">
                
        <!--  Utilizar tabela de dados do JSF para dar aparência para a tela -->
              
        <!-- Coloca SCROLL aqui. -->
        <h:form id="formParamRoot">
        
        <!-- onclick="submit(); javascript:window.open('http://localhost:8080/EstudoJSF/testeParam.jsf', 'Pagina','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=800,height=400'); return false;" -->
        
        <h:commandButton id="botaoTal" value="Obter Valores" actionListener="#{param.obtem}">
        	<f:attribute name="valor1" value="propertyValue1" />   
        	<f:attribute name="valor2" value="propertyValue2" />
        </h:commandButton>
		
		<h:commandButton id="botao" value="Mostra" action="#{param.mostra}">
        </h:commandButton>
		
				
		</h:form>      
        
        </div>
                
        </ui:define>
        
        <ui:define name="botoes">
        <center>
        <h:form>
        	  <h:outputText value="Uepa"/>   
        	   
        </h:form>
        </center>
        </ui:define>
      
      	
    </ui:composition>

</html>
package beans;


import javax.faces.component.html.HtmlPanelGrid;
import javax.faces.event.ActionEvent;

public class Param {

	private String valor1;
	private String valor2;
	private HtmlPanelGrid painel;
	
	public Param()
	{
		
	}
		
	public String obtem()
	{			
		 
		 //this.setValor1((String) e.getComponent().getAttributes().get("valor1"));
		 //this.setValor2((String) e.getComponent().getAttributes().get("valor2"));
		  
		   
		  System.out.println("Valor 1: ");
		  System.out.println("Valor 2: ");
		
		  return "";
		
	}
	
	public String mostra()
	{
		System.out.println("Valor 1: " + valor1);
		System.out.println("Valor 2: " + valor2);
		
		return "";
		
	}
	
	
	


	public String getValor1() {
		return this.valor1;
	}


	public void setValor1(String valor) {
		this.valor1 = valor;
	}


	public String getValor2() {
		return valor2;
	}


	public void setValor2(String valor) {
		this.valor2 = valor;
	}
	
	
	public HtmlPanelGrid getPainel() {
		return painel;
	}


	public void setPainel(HtmlPanelGrid painel) {
		this.painel = painel;
	}
	
	
	
}

7 Respostas

lucianotome

Cara, quando vc chama um metodo com ActionListener ele deve ser implementado desta forma:

public void apagaObjeto(ActionEvent event){
lucianotome
*
      Action Event Handler Method: métodos que recebem um ActionEvent e são void (não procuram nenhuma regra de negação, voltam para a mesma página).
          o Apenas os componentes que implementam ActionSource podem usar esse método.
          o UICommand e UIButton

JSP:

<h:commandLink id="NAmerica" action="bookstore" 
  actionListener="#{localeBean.chooseLocaleFromLink}">

Backbean:

public void chooseLocaleFromLink(ActionEvent event) {

  String current = event.getComponent().getId();

  FacesContext context = FacesContext.getCurrentInstance();

  context.getViewRoot().setLocale((Locale)

    locales.get(current));

}
V

Olá!

Compreendo o que disse! Eu coloquei uma versão incompatível com que o que está corrente! O fato é que eu já fiz desse jeito também e o erro persiste o mesmo!

V

Atualizando o código:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!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:t="http://myfaces.apache.org/tomahawk"
      xmlns:c="http://java.sun.com/jstl/core">
      
  

	
    <ui:composition template="./template2.xhtml">
 
       <h:messages globalOnly="true" />       
        <ui:define name="menuAtributo">
        	<ul>
        		<li>Cadastro de País</li>
        	</ul>
        
        </ui:define>
        
        <ui:define name="conteudoAtributo">
        
	        
        <div style="overflow:auto; height:300px;">
                
        <!--  Utilizar tabela de dados do JSF para dar aparência para a tela -->
              
        <!-- Coloca SCROLL aqui. -->
        <h:form id="formParamRoot">
        
        <!-- onclick="submit(); javascript:window.open('http://localhost:8080/EstudoJSF/testeParam.jsf', 'Pagina','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=800,height=400'); return false;" -->
        
        <h:commandButton id="botaoTal" value="Obter Valores" actionListener="#{param.obtem}">
        	<f:attribute name="valor1" value="propertyValue1" />   
        	<f:attribute name="valor2" value="propertyValue2" />
        </h:commandButton>
		
		<h:commandButton id="botao" value="Mostra" actionListener="#{param.mostra}">
        </h:commandButton>
		
				
		</h:form>      
        
        </div>
                
        </ui:define>
        
        <ui:define name="botoes">
        <center>
        <h:form>
        	  <h:outputText value="Uepa"/>   
        	   
        </h:form>
        </center>
        </ui:define>
      
      	
    </ui:composition>

</html>
package beans;


import javax.faces.component.html.HtmlPanelGrid;
import javax.faces.event.ActionEvent;

public class Param {

	private String valor1;
	private String valor2;
	private HtmlPanelGrid painel;
	
	public Param()
	{
		
	}
		
	public void obtem(ActionEvent e)
	{			
		 
		 this.setValor1((String) e.getComponent().getAttributes().get("valor1"));
		 this.setValor2((String) e.getComponent().getAttributes().get("valor2"));
		  
		   
		  System.out.println("Valor 1: ");
		  System.out.println("Valor 2: ");
		
		 		
	}
	
	public void mostra(ActionEvent e)
	{
		System.out.println("Valor 1: " + valor1);
		System.out.println("Valor 2: " + valor2);
		
		
	}
	
	
	


	public String getValor1() {
		return this.valor1;
	}


	public void setValor1(String valor) {
		this.valor1 = valor;
	}


	public String getValor2() {
		return valor2;
	}


	public void setValor2(String valor) {
		this.valor2 = valor;
	}
	
	
	public HtmlPanelGrid getPainel() {
		return painel;
	}


	public void setPainel(HtmlPanelGrid painel) {
		this.painel = painel;
	}
	
	
	
}
V

Ah, o erro persiste mesmo com o código como está apresentado por último!

lucianotome

Posta seu faces-config, pra gente ve como vc implementou.

V

Um faces-config saindo…

<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
			
  <!-- from project setup -->
  <application>
    <view-handler>
      com.sun.facelets.FaceletViewHandler
    </view-handler>    
  </application>
  
  <!-- our NumberBean we created before -->
  <managed-bean>
    <managed-bean-name>NumberBean</managed-bean-name>
    <managed-bean-class>beans.NumberBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    <managed-property>
      <property-name>min</property-name>
      <value>1</value>
    </managed-property>
    <managed-property>
      <property-name>max</property-name>
      <value>10</value>
    </managed-property>
  </managed-bean>
  
  <managed-bean>
    <managed-bean-name>PersonBean</managed-bean-name>
    <managed-bean-class>beans.PersonBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
  
  
    
   
   <managed-bean>
    	<managed-bean-name>Atributo</managed-bean-name>
    	<managed-bean-class>beans.Atributo</managed-bean-class>
    	<managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    
  
  
  <managed-bean>
    <managed-bean-name>GeraEntidade</managed-bean-name>
    <managed-bean-class>beans.GeraEntidade</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
  
  <managed-bean>
    <managed-bean-name>CadastraBean</managed-bean-name>
    <managed-bean-class>beans.CadastraBeanFacesConfig</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
  
  <managed-bean>
    <managed-bean-name>CadastraDominioEnumerado</managed-bean-name>
    <managed-bean-class>beans.CadastraDominioEnumerado</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    
    <managed-bean>
    <managed-bean-name>TabelaAtributos</managed-bean-name>
    <managed-bean-class>beans.TabelaAtributos</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
  
    <managed-bean>
    <managed-bean-name>param</managed-bean-name>
    <managed-bean-class>beans.Param</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    <managed-property>
        <property-name>valor1</property-name>
        <value>#{param.valor1}</value>
    </managed-property>
    <managed-property>
        <property-name>valor2</property-name>
        <value>#{param.valor2}</value>
    </managed-property>
    </managed-bean>
  
  	<managed-bean>
    <managed-bean-name>pais</managed-bean-name>
    <managed-bean-class>beans.Pais</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
  
  
  <!-- going from guess.xhtml to response.xhtml -->
  <navigation-rule>
    <from-view-id>/guess.xhtml</from-view-id>
    <navigation-case>
      <from-outcome>success</from-outcome>
      <to-view-id>/response.xhtml</to-view-id>
    </navigation-case>
  </navigation-rule>

  <!-- going from response.xhtml to guess.xhtml -->
  <navigation-rule>
    <from-view-id>/response.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>success</from-outcome>
      <to-view-id>/guess.xhtml</to-view-id>
    </navigation-case>
  </navigation-rule>
  
  <!-- indo de principal.xhtml to principal.xhtml -->
  <navigation-rule>
    <from-view-id>/principal.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>teste</from-outcome>
      <to-view-id>/principal.xhtml</to-view-id>
    </navigation-case>
  </navigation-rule>
  
  <navigation-rule>
    <from-view-id>*</from-view-id>
    <navigation-case>
        <from-outcome>simples</from-outcome>
      <to-view-id>/cadastraAtributoSimples.xhtml</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>regra</from-outcome>
      <to-view-id>/cadastraRegra.xhtml</to-view-id>
    </navigation-case>
    
    <navigation-case>
        <from-outcome>composto</from-outcome>
      <to-view-id>/cadastraAtributoComposto.xhtml</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>idiomas</from-outcome>
      <to-view-id>/cadastraIdiomas.xhtml</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>atributo</from-outcome>
      <to-view-id>/cadastraAtributo.xhtml</to-view-id>
    </navigation-case>
  </navigation-rule>
  
  
  <converter>
  	<converter-id>conversorBooleano</converter-id>
  	<converter-class>beans.ConversorVerdadeiroFalso</converter-class>
  </converter>
  
</faces-config>
Criado 12 de junho de 2009
Ultima resposta 13 de jun. de 2009
Respostas 7
Participantes 2