Aprendendo JSF 2

Estou apredendo JSF 2 e gostaria de saber onde está o problema: javax.faces.el.MethodNotFoundException: javax.el.MethodNotFoundException: /login.xhtml @32,85 action="#{loginController.acesso}": Method not found: com.viewlog.LoginController@58007.acesso(). Não estou conseguindo entender por que o método naão está sendo encontrado.

  • Estou utilizando o JBoss AS 6

[code]<?xml version="1.0" encoding="UTF-8"?>

[/code]

web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>logsview</display-name> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.jsf</url-pattern> </servlet-mapping> <context-param> <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>client</param-value> </context-param> <context-param> <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> <param-value>resources.application</param-value> </context-param> <listener> <listener-class>com.sun.faces.config.ConfigureListener</listener-class> </listener> </web-app>

pagina

[code]<ui:composition xmlns=“http://www.w3.org/1999/xhtml
xmlns:h=“http://java.sun.com/jsf/html
xmlns:f=“http://java.sun.com/jsf/core
xmlns:ui=“http://java.sun.com/jsf/facelets
xmlns:a4j=“http://richfaces.org/a4j
xmlns:rich=“http://richfaces.org/rich”>

<f:view>
	<h:head></h:head>
	<h:body>

		<rich:panel header="Visualizando Logs JBoss AS">
			<h:form>
			  
			  <h:panelGrid columns="2">
			  
			      <h:outputText value="Login:" />
				  <h:inputText id="login" value="#{loginController.login}">
				        <rich:validator />
				  </h:inputText> 
				
				  
				  <h:outputText value="Senha" />
				  <h:inputText id="senha" value="#{loginController.senha}">
				        <rich:validator />
				  </h:inputText>
				   

				  
                    
			  </h:panelGrid>
			   <h:commandButton action="#{loginController.acesso}" value="Validar Acesso" />
			   <rich:message for="login" />
			   <rich:message for="senha" />
			</h:form>
		</rich:panel>
	</h:body>
</f:view>

</ui:composition>[/code]

classe Java

[code]import javax.faces.bean.ManagedBean;
import javax.validation.constraints.Size;

@ManagedBean(name=“loginController”)
public class LoginController {

@Size(min=3, max=12,message="O Login deve entre 3 e 12 caracteres")
private String login = "usuario";

@Size(min=6,message="A Senha deve possuir no minimo 6 caracteres")
private String senha =  "teste123";



public void  acesso(String login, String senha){
	
	if(this.login.equals(login)  && this.senha.equals("senha")){
		System.out.println("Testando");
	}
}

public String getLogin() {
	return login;
}
public void setLogin(String login) {
	this.login = login;
}
public String getSenha() {
	return senha;
}
public void setSenha(String senha) {
	this.senha = senha;
}	

}[/code]

Obrigado xD

O método que vc está chamando acesso, não pode receber parâmetros e deve retornar uma String (com a página que deve ser redirecionado ou null para permanecer na mesma página).

É isso aí, brother, o método que você está chamando deve receber dois parâmetros do tipo String. Lembra do conceito de sobrecarga? Pois é… esse método que você tá chamando na view não recebe nenhum parametro, então seria equivalente a um método com a seguinte assinatura:

public void acesso() { //Implementação }

já que o método que tem na ação não bate com o método chamado na view, vai dar MethodNotFoundException mesmo. Muda lá e fala aí o q rolou :stuck_out_tongue: