Problema ao acessar método excluir com JSF

10 respostas
M

Olá pessoal, não estou conseguindo chamar o método excluir (através de um h:commandLink) que está dentro de um Bean através de um h:form com h:dataTable, segue o código. Agradeço muito a ajuda! O erro tá postado no final.

<body> 
<h:form>//value = propriedade do backbean que retorna uma lista. var = nome referenciar itens da lista 
<h:dataTable value="#{agenda.dados}" var="agenda" border="1"> 
<h:column> 
<f:facet name="header"> 
<h:outputText value="#{msgs.Cod}"/> 
</f:facet> 
<h:outputText value="#{agenda.cod}"/> 
</h:column> 
<h:column> 
<f:facet name="header"> 
<h:outputText value="#{msgs.Titulo}"/> 
</f:facet> 
<h:outputText value="#{agenda.titulo}"/> 
</h:column> 
<h:column> 
<f:facet name="header"> 
<h:outputText value="#{msgs.Link}"/> 
</f:facet> 
<h:commandLink value="Excluir" action="#{agenda.exclui}" > 
<f:setPropertyActionListener target="#{agenda.cod}" value="#{agenda.cod}" /> 
</h:commandLink> 
</h:column> 
</h:dataTable> 
</h:form> 
</body> 
</f:view> 
</html>
meu Bean:
public class AgendaBean { 
private Connection conn; 
public void abrirConexao() 
throws SQLException, 
NamingException, 
ClassNotFoundException 
{ 
if (conn != null) return; 
Class.forName("org.gjt.mm.mysql.Driver"); 
conn = DriverManager.getConnection("jdbc:mysql://localhost/bdlivros","root","senha123"); 
} 

public Result getDados() 
throws SQLException, 
NamingException, 
ClassNotFoundException 
{ 
try{ 
abrirConexao(); 
Statement stmt = conn.createStatement(); 
// stmt.executeUpdate("INSERT INTO livros(Cod, Titulo) VALUES (12333, 'Weeeb') "); esta inserindo ok! 
ResultSet result = stmt.executeQuery("SELECT * from livros"); 
return ResultSupport.toResult(result); 
}finally{ 
fecharConexao(); 
} 
} 

// Verificar como remover livros 
public void exclui(String cod) 
throws SQLException, 
NamingException, 
ClassNotFoundException{ 
PreparedStatement pst = null; 
{ 
try{ 
abrirConexao(); 
pst = conn.prepareStatement("DELETE FROM livros WHERE cod=?"); 
pst.setString(1, cod); 
pst.executeUpdate(); 
//return ResultSupport.toResult(result); 
}finally{ 
fecharConexao(); 
} 
} 
} 
public void fecharConexao() throws SQLException{ 
if (conn == null) return; 
conn.close(); 
conn = null; 
} 
}
<faces-config version="1.2" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
    <managed-bean>
        <managed-bean-name>agenda</managed-bean-name>
        <managed-bean-class>br.com.integrator.cap15.jsf.AgendaBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
</faces-config>

Erro:

type Exception report

message

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

exception

javax.servlet.ServletException: #{agenda.exclui}: javax.el.MethodNotFoundException: Method not found: {cod=1, titulo=Algoritmos}.exclui()
root cause

javax.faces.FacesException: #{agenda.exclui}: javax.el.MethodNotFoundException: Method not found: {cod=1, titulo=Algoritmos}.exclui()
root cause

javax.faces.el.MethodNotFoundException: javax.el.MethodNotFoundException: Method not found: {cod=1, titulo=Algoritmos}.exclui()
root cause

javax.el.MethodNotFoundException: Method not found: {cod=1, titulo=Algoritmos}.exclui()
note The full stack traces of the exception and its root causes are available in the Sun Java System Application Server 9.1_01 logs.

10 Respostas

tiago.vt

amigo edita o seu post e usa o Code do editor para colocar o codigo fica mais facil do povo ver e achar o erro.

olhando por cima nâo vi o atributo agenda que voce ta setando a propriedade e coloca seu faces-config pra ver como que esta o mapeamento do seu managed bean

foxpv

O método exclui não pode receber nenhum argumento. Acho que é esse o problema.

Peço por favor, que quando for postar algum código, que coloque dentro da tag ‘code’. Do jeito que você colocou fica praticamente impossível de ler.

alves.Felipe

foxpv:
O método exclui não pode receber nenhum argumento. Acho que é esse o problema.

Peço por favor, que quando for postar algum código, que coloque dentro da tag ‘code’. Do jeito que você colocou fica praticamente impossível de ler.


isso mesmo…
e tb da uma olhada ai
http://www.guj.com.br/posts/list/50115.java

M

O problema é que não estou conseguindo chegar (atraves de chamada) no método exclui. Não estou sabendo acessar o método dentro do Bean.

Erro: javax.servlet.ServletException: #{agenda.exclui}: javax.el.MethodNotFoundException: Method not found: {cod=1, titulo=Algoritmos}.exclui()

M

Desculpa, sou marinheiro de primeira viagem aqui…:slight_smile: Segue o código completo. Na verdade to me batendo pra chamar o método exclui do Bean. Obrigado pela ajuda.

foxpv

Pois é, o método exclui que você criou, recebe uma String como argumento. Ele não pode receber nenhum argumento.

A exceção diz exatamente isso, o JSF está procurando por um método exclui() (sem argumentos) e não está encontrando.

tiago.vt

seu bean ta faltando o atributo agenda já que voce ta setando

<f:setPropertyActionListener target="#{agenda.cod}" value="#{agenda.cod}" />

foxpv

tiago.vt:
seu bean ta faltando o atributo agenda já que voce ta setando

<f:setPropertyActionListener target="#{agenda.cod}" value="#{agenda.cod}" />

Não entendi, que atributo agenda? não é o bean dele que se chama agenda?

tiago.vt

foxpv:
tiago.vt:
seu bean ta faltando o atributo agenda já que voce ta setando

<f:setPropertyActionListener target="#{agenda.cod}" value="#{agenda.cod}" />

Não entendi, que atributo agenda? não é o bean dele que se chama agenda?

Ta certo, mas o cod???
eu não vi no bean dele

foxpv

Verdade! Isso pode causar problemas também. Mas o erro em questão é que o método exclui não pode conter argumentos. No caso, cod, deve ser um atributo do bean Agenda.

Criado 18 de outubro de 2010
Ultima resposta 18 de out. de 2010
Respostas 10
Participantes 4