JSF ajuda!

Fala galera
me ajudem por favor

não estou conseguindo fazer meu método alterar e excluir…
ai vai

Conexão

[code]package br.com.intacto;

import java.sql.*;

public class Conexao {
public static String status="";
public static Connection obterConexao() throws InstantiationException, IllegalAccessException{
Connection con = null;

try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url = "jdbc:mysql:///jsf?user=root&password=1234";
con = DriverManager.getConnection(url);
status = "Conexao Aberta";

} 
catch (ClassNotFoundException e) {
e.printStackTrace();
} 

catch (SQLException e) {
e.printStackTrace();
}

return con;
}

}[/code]

Método Incluir

[code]
public void incluir () throws InstantiationException, IllegalAccessException{

	Connection cn = Conexao.obterConexao();
	PreparedStatement pst = null;
	try{
		pst = cn.prepareStatement("insert into usuarios(login,nome,senha) values(?,?,?)");
		pst.setString(1, nome);
		pst.setString(2, login);
		pst.setString(3, senha);
		pst.executeUpdate();
		status = nome + " Incluido com Sucesso ";
		}
	catch (SQLException e ){
		status = " Falha na inclusão: " + e.getMessage();
	}
	
}[/code]

O método incluir funciona perfeitamente… to usando chave primaria chamada (idusuario)
Como ficaria meu método excluir e alterar??
Obrigado

Cara, os atributos nome, login e senha são atributos de classe? bom se for, dá pra usar a mesma idéia que você usou para fazer os próximos:

public void excluir() throws InstantiationException, IllegalAccessException{   
           
        Connection cn = Conexao.obterConexao();   
        PreparedStatement pst = null;   
        try{   
            pst = cn.prepareStatement("delete from usuarios where login=?");   
            pst.setString(1, login);   
            pst.executeUpdate();   
            status = login + " Excluído com Sucesso ";   
            }   
        catch (SQLException e ){   
            status = " Falha na exclusão: " + e.getMessage();   
        }   
           
    }  

Bom,nesta sugestão eu utilizei o campo login pois presumo que seja um campo unique em sua tabela, mas o ideal seria utilizar a chave primária (idusuario). Também recomendaria criar uma classe especializada em transações separada do modelo, pelo que parece você utiliza uma classe para as duas coisas!
Bem, são só sugestões ok!
Até!

O que isso tem relacionado com JSF?

Entao velho

é melhor ter a classe bean e uma classe com os métodos em geral (incluir, excluir, alterar) ??

ta tudo em uma classe vo fazer isso q vc falo…
vlw

so uma coisa
esse método excluir não teria que ter parametro? pq a pessoa digitaria na pagina jsp e chamaria o método…
olha minha pagina excluir e ve se é assim mesmo…

[code]
<%@ taglib uri=“http://java.sun.com/jsf/core” prefix=“f” %>
<%@ taglib uri=“http://java.sun.com/jsf/html” prefix=“h” %>

JSF

Excluir Usuario

		 <tr>
                    <td>ID</td>
                    <td><h:inputText value="#{usuarios.login}"/></td>
                </tr>
		  <tr>
                <tr><td colspan="2" align="center">
                        <h:commandButton value="Excluir" action="#{usuarios.excluir}"/>
                        
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <h:outputText id="resultado" value="#{usuarios.status}" />
                    </td>
                </tr>
            </table>
        </h:form>

        
    </f:view> 
</body> 
[/code]

ele da esse erro…
oq poderia ser??

[code]
HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: #{usuarios.excluir}: javax.faces.el.MethodNotFoundException: excluir: br.com.intacto.Usuarios.excluir()
javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)

root cause

javax.faces.FacesException: #{usuarios.excluir}: javax.faces.el.MethodNotFoundException: excluir: br.com.intacto.Usuarios.excluir()
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:74)
javax.faces.component.UICommand.broadcast(UICommand.java:312)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:267)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:381)
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)

root cause

javax.faces.el.MethodNotFoundException: excluir: br.com.intacto.Usuarios.excluir()
com.sun.faces.el.MethodBindingImpl.method(MethodBindingImpl.java:206)
com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:124)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:72)
javax.faces.component.UICommand.broadcast(UICommand.java:312)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:267)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:381)
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)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs.
Apache Tomcat/6.0.16[/code]

em seu Usuarios não existe o método excluir!
Cara como você fez o incluir funcionar? o excluir funciona do mesmo modo! De onde você obtêm os dados para incluir?

ta dando o mesmo erro…
e existe o método excluir normalmente na classe Usuarios igual o método Incluir

[code]
HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: #{usuarios.excluir}: javax.faces.el.MethodNotFoundException: excluir: br.com.intacto.Usuarios.excluir()
javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)

root cause

javax.faces.FacesException: #{usuarios.excluir}: javax.faces.el.MethodNotFoundException: excluir: br.com.intacto.Usuarios.excluir()
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:74)
javax.faces.component.UICommand.broadcast(UICommand.java:312)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:267)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:381)
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)

root cause

javax.faces.el.MethodNotFoundException: excluir: br.com.intacto.Usuarios.excluir()
com.sun.faces.el.MethodBindingImpl.method(MethodBindingImpl.java:206)
com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:124)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:72)
javax.faces.component.UICommand.broadcast(UICommand.java:312)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:267)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:381)
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)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs.
Apache Tomcat/6.0.16[/code]

Método Excluir

[code]
public void excluir() throws InstantiationException, IllegalAccessException{

            Connection cn = Conexao.obterConexao();     
            PreparedStatement pst = null;     
            try{     
                pst = cn.prepareStatement("delete from usuarios where login=?");     
             pst.setString(1, login);     
             pst.executeUpdate();     
              status = login + " Excluído com Sucesso ";     
              }     
           catch (SQLException e ){     
               status = " Falha na exclusão: " + e.getMessage();     
           }     

}[/code]

experimenta fazer o seguinte muda o retorno do excluir de void para String!!! a assinatura para métodos action chamados do jsp deve ter o retorno uma String!

sim sim…
se não o método incluir dava problema e está funcionando perfeitamente
não descobrir a solução ainda desse problema

e cowboy

assim??

[code]
public String excluir() throws InstantiationException, IllegalAccessException{

            Connection cn = Conexao.obterConexao();     
            PreparedStatement pst = null;     
            try{     
                pst = cn.prepareStatement("delete from usuarios where login=?");     
             pst.setString(1, login);     
             pst.executeUpdate();     
              status = login + " Excluído com Sucesso ";     
              }     
           catch (SQLException e ){     
               status = " Falha na exclusão: " + e.getMessage();     
           }
			return login;     

}[/code]

deu o mesmo erro!

Então, você pode postar o código do br.com.intacto.Usuarios?
Só pra gente dar uma conferida! tá meio vago, tem algumas variáveis fantasmas ai que eu não entendi direito!

[code]
package br.com.intacto;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class Usuarios {

private int idUsuario = 0;
private String nome = "";
private String login = "";
private String senha = "";
private String status = "";


public int getIdUsuario() {
	return idUsuario;
}
public void setIdUsuario(int idUsuario) {
	this.idUsuario = idUsuario;
}
public void setStatus(String status) {
	this.status = status;
}
public void setNome(String nome){
    this.nome = nome;
}
public String getNome(){
    return this.nome;
}
public void setLogin(String login){
    this.login = login;
}
public String getLogin(){
    return this.login;
}

public void setSenha(String senha){
    this.senha = senha;
}
public String getSenha(){
    return this.senha;
}
public String getStatus(){
    return this.status;
}

public void incluir () throws InstantiationException, IllegalAccessException{
	
	Connection cn = Conexao.obterConexao();
	PreparedStatement pst = null;
	try{
		pst = cn.prepareStatement("insert into usuarios(login,nome,senha) values(?,?,?)");
		pst.setString(1, nome);
		pst.setString(2, login);
		pst.setString(3, senha);
		pst.executeUpdate();
		status = nome + " Incluido com Sucesso ";
		}
	catch (SQLException e ){
		status = " Falha na inclusão: " + e.getMessage();
	}
	
}

public String verificarUsuario() throws InstantiationException, IllegalAccessException{

    Connection cn = Conexao.obterConexao();
    
    try {
        String q = "";
        q = " select idusuario, nome from usuarios where login = ? and senha = ? ";
        PreparedStatement pst  = cn.prepareStatement(q);
		pst.setString(1, login);
        pst.setString(2, senha);

        ResultSet rs = pst.executeQuery();
		if(rs.next()){
			idUsuario = rs.getInt("idusuario");
			nome = rs.getString("nome");
			status = nome + " localizado!";
        	return "cadastrado";
		}
		else{
			status = "Login incorreto!";
			return "naocadastrado";
		}
    } catch (SQLException e) {
        status = " Falha: " + e.getMessage();
        return "falha";
    }

}

public ResultSet getLista() throws InstantiationException, IllegalAccessException {
ResultSet rs = null;
Connection cn = Conexao.obterConexao();
PreparedStatement pst = null;
try{
pst = cn.prepareStatement(“select idusuario, nome from usuarios”);
rs = pst.executeQuery();

	} catch (SQLException e) {
		// TODO: handle exception
	}
	return rs;
}  

public String excluir() throws InstantiationException, IllegalAccessException{

            Connection cn = Conexao.obterConexao();     
            PreparedStatement pst = null;     
            try{     
                pst = cn.prepareStatement("delete from usuarios where login=?");     
             pst.setString(1, login);     
             pst.executeUpdate();     
              status = login + " Excluído com Sucesso ";     
              }     
           catch (SQLException e ){     
               status = " Falha na exclusão: " + e.getMessage();     
           }
			return login;     

}
}[/code]

Caramba, tá até com uma cara boa seu action, em seu faces-config.xml existe o mapeamento ?

<managed-bean>
  <managed-bean-name>usuarios</managed-bean-name>
  <managed-bean-class>br.com.intacto.Usuarios</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

Eu tinha problemas deste tipo, que aparentemente estava tudo correto e não funcionava quando retirava projetos do CVS, o build-path do projeto não estava correto, dai eu alterava o .java e ele não criava o .class!
Se o mapeamento estiver correto, testa modificar o metodo incluir e testar para ver se está dando certo a compilação e tals!

nada
cara
so da nullnot la
=\

ai conseguir
como seria a url jdbc pra update??

Acredito que deve ser a mesma para todas as operações, insert, update…
Cara, mata minha curiosidade, o que estava acontecendo de errado?

Cara, olha só, eu tive o mesmo problema (a mesma exceção):

javax.faces.el.MethodNotFoundException /principal.xhtml @33,107 action="#{PersonBean.geraEntidade}": Method not found: beans.PersonBean@1578aab.geraEntidade() at com.sun.facelets.el.LegacyMethodBinding.invoke(LegacyMethodBinding.java:71)

No meu caso, depois de olhar em um monte de lugares e perder quase uma tarde só com isso aqui, eu resolvi o problema com estas mudanças:

O Botão que eu estou usando tem o código abaixo:

<h:commandButton value="Cadastrar" action="#{PersonBean.geraEntidade}"/>

Ou seja, através do campo action, eu referencio o método geraEntidade que está no bean PersonBean. No entanto, o campo action é utilizado comumente para efetuar navegação. Então é de se esperar que o método que está sendo referenciado retorne um String e que este String represente uma regra de navegação presente em seu faces-config.xml. Assim, a primeira coisa que fiz foi mudar a assinatura do método para retornar uma String que represente uma regra de navegação.

Ainda assim, eu não havia conseguido resolver o problema. Mas isto foi apenas uma herança de uma tentativa frustrada de usar o actionListener. Eu havia colocado como argumento do meu método o trecho ‘javax.faces.event.ActionEvent e’ para sinalizar que o método estava recebendo um método para ser tratado. Ou seja, meu método estava recebendo um parâmetro o que fazia com que a assinatura não batesse com o método chamado pelo action. Quando se utiliza actionListener, é natural que as assinaturas dos métodos nos beans tenham parâmetros mas que os métodos não tenham argumentos quando são chamados no campo (ex.: <h:commandButton actionListener=“Bean.metodo”/> e o Bean ter um método public void metodo(javax.faces.event.ActionEvent e) {…}). Me parece que há até mais argumentos do que isso para usar ActionListener.

Em resumo:

  1. Se uso action, é aconselhável definir uma regra de navegação correspondente;
  2. Checar a assinatura do método. Do que eu vi de problemas aí nos fóruns, a maioria dos ‘javax.faces.el.MethodNotFoundException’ deve-se à assinatura do método no bean que não está condizente com o que é especificado na página JSF/XHTML ou mesmo a fazer uma chamada como action="#{Bean.metodo" (esquecendo de fechar a chave, por exemplo).

É isso aí! Flws!

a string de conexão esta certa?

String url = "jdbc:mysql:///jsf?user=root&password=1234";

Pra mim ela é nova…nunca vi uma igual heheheheh.

mas se funciona…