Primefaces - Sistema de login não funciona

18 respostas
Flip_novidade

Galera pra eu postar aqui foi so o ultimo caso mesmo...

tou tentando desde onten atarde...

fiz um sistema de login, mais não vai, coloco usuario correto... errado...
dps do login ele é redirecionado a alguma pagina...

segue o erro:

javax.servlet.ServletException: javax.el.MethodNotFoundException: /index.xhtml @49,76 action="#{loginBean.login}": Method not found: [email removido]()
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)
codigo:
<h:form id="login">
					<p:focus for="usuario" />

					<h:panelGrid columns="2">
						<h:outputLabel for="usuario" value="Usuário:*" />
						<p:inputText id="usuario" required="true"
							value="#{loginBean.usuario}" label="Usuário" size="40"
							title="Campo Obrigatório. Informe o login do usuário">
							<f:validateLength minimum="2" maximum="50" />
							<p:tooltip for="usuario" showEvent="focus" hideEvent="blur" />
						</p:inputText>

						<h:outputText value="Senha:*" />
						<p:password id="senha" value="#{loginBean.senha}" label="Senha"
							title="Campo Obrigatório. Informe a senha do usuário">
							<f:validateLength minimum="2" maximum="20" />
							<p:tooltip for="senha" showEvent="focus" hideEvent="blur" />
						</p:password>
					</h:panelGrid>
					
					<p:commandButton type="submit" value=" Login" icon="login"
						action="#{loginBean.login}" ajax="false" style="margin-left:20px;" />
				</h:form>
public class LoginBean {
	private Conexao obj_conexao;

	// Atributos
	private String usuario;
	private String senha;

	// Get and Set
	public String getUsuario() {
		return usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String login(String usuario, String senha) {
		FacesContext mensagem = FacesContext.getCurrentInstance();
		try {

			String comando_sql = "select login, senha from tbl_usuarios where login=? and senha=?";
			PreparedStatement obj_sql = (PreparedStatement) obj_conexao
					.getConexao().prepareStatement(comando_sql);

			obj_sql.setString(1, usuario.trim());
			obj_sql.setString(2, senha.trim());

			ResultSet rs = obj_sql.executeQuery();
			rs.next();
			obj_sql.close();
			if (rs.next() && rs.getString("usuario") != null
					&& rs.getString("usuario").equals(usuario)
					&& rs.getString("senha").equals(senha)) {
				
				return "clientes.jsf";
				
			} else {
				
				return "index.jsf";
			}

		} catch (Exception e) {
			
			System.out.println("Erro exception do login" + e.getMessage());

		}
		return "index.jsf";

	}

valew

18 Respostas

jeanmalvessi

Cara,

javax.servlet.ServletException: javax.el.MethodNotFoundException: /index.xhtml @49,76 action="#{loginBean.login}": Method not found: [email removido]() javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)

Observe o ‘MethodNotFoundException’. Traduzindo, método não encontrado. Você está com um método no MB que recebe 2 parâmetros e está chamando ele no xhtml sem nenhum parâmetro.

jeanmalvessi

Tire os parâmetros do método que aí vai funcionar

Flip_novidade

public String login(String usuario, String senha)

deixo assim

public String login()

jeanmalvessi

Mais uma coisa… não retorne o String com o nome da página, senão o seu botão vai interpretar o nome da página como nome do método a executar

jeanmalvessi

Flip_novidade:
public String login(String usuario, String senha)

deixo assim

public String login()

Isso mesmo. E para redirecionar, podes fazer assim:

FacesContext fc = FacesContext.getCurrentInstance();
        ExternalContext ec = fc.getExternalContext();
        try {
            ec.redirect("local_para_direcionar");
        } catch (Exception ex) {
            Logger.getLogger(Redireciona.class.getName()).log(Level.SEVERE, null, ex);
        }
Flip_novidade

beleza…

mais como faço para ele redirecionar caso correto o login?

jeanmalvessi

Primeiro troque o retorno do seu método de String para void.

Depois, ao invés disso

return "clientes.jsf";

Faça isso

FacesContext fc = FacesContext.getCurrentInstance();  
        ExternalContext ec = fc.getExternalContext();  
        try {  
            ec.redirect("clientes.jsf");  
        } catch (Exception ex) {  
            Logger.getLogger(Redireciona.class.getName()).log(Level.SEVERE, null, ex);  
        }

Ou semelhante a isso, talvez tenha que colocar o caminho completo até a página que você deseja

Flip_novidade

agora tah dando meu login null

public void login() {
		FacesContext mensagem = FacesContext.getCurrentInstance();
		FacesContext fc = FacesContext.getCurrentInstance(); 
		ExternalContext ec = fc.getExternalContext(); 
		try {

			String comando_sql = "select login, senha from tbl_usuarios where login=? and senha=?";
			PreparedStatement obj_sql = (PreparedStatement) obj_conexao
					.getConexao().prepareStatement(comando_sql);

			obj_sql.setString(1, usuario.trim());
			obj_sql.setString(2, senha.trim());

			ResultSet rs = obj_sql.executeQuery();

			rs.next();
			obj_sql.close();
			if (rs.next() && rs.getString("usuario") != null && rs.getString("usuario").equals(usuario) && rs.getString("senha").equals(senha)) {
				ec.redirect("clientes.jsf");
				//return "clientes.jsf";
				
			} else {
				ec.redirect("index.jsf");
				//return "index.jsf";
			}

		} catch (Exception e) {
			
			System.out.println("Erro exception do login" + e.getMessage());

		}	

	}
jeanmalvessi

Não entendi… o que está null ? Qual é o erro exatamente ?

Flip_novidade

tipo eu coloco o logim e senha e num faiz nada…

Flip_novidade

Erro exception do loginnull

ta caindo aqui

} catch (Exception e) {  
          
        System.out.println("Erro exception do login" + e.getMessage());  
  
    }
Flip_novidade
public void login() {
		FacesContext mensagem = FacesContext.getCurrentInstance();
		FacesContext fc = FacesContext.getCurrentInstance(); 
		ExternalContext ec = fc.getExternalContext(); 
		try {

			String comando_sql = "select login, senha from tbl_usuarios where login=? and senha=?";
			PreparedStatement obj_sql = (PreparedStatement) obj_conexao.getConexao().prepareStatement(comando_sql);

			obj_sql.setString(1, usuario.trim());
			obj_sql.setString(2, senha.trim());

			ResultSet rs = obj_sql.executeQuery();

			rs.next();
			//obj_sql.close();
			
			System.out.println("Dentro do try ");
			if (rs.next() && rs.getString("login") != null && rs.getString("login").equals(usuario) && rs.getString("senha").equals(senha)) {
				
				ec.redirect("clientes.jsf");
				System.out.println("Dentro do try if");
				
			} else {
				
				ec.redirect("index.jsf");
				System.out.println("Dentro do try else");
				
			}

		} catch (Exception e) {
			
                         //ele entra aqui direto
			System.out.println("Erro exception do login " + e.getMessage());
			System.out.println("Dentro do catch");

		}	

	}
Flip_novidade

parece que ele não est pegando nada pra entra no try…

clico no botão logar e não vai…

jeanmalvessi

Tente tirar o ajax=“false” do botão e colocar process=“login”

Flip_novidade

<p:commandButton type="submit" value=" Login" icon="login" action="#{loginBean.login}" process="login" style="margin-left:20px;" />

assim ?

Flip_novidade

mesma coisa…

“Erro exception do login null
Dentro do catch”

jeanmalvessi

Sabe debugar a aplicação ? Assim podes ir linha por linha e ver exatamente aonde acontece o erro

Flip_novidade

alguem ai pra dar uma força

Criado 4 de dezembro de 2012
Ultima resposta 4 de dez. de 2012
Respostas 18
Participantes 2