estou tentando fazer uma agenda em jsf com as 4 operacoes básicas: incluir, buscar, excluir e alterar.
Construi uma tabela que mostra todos os campos da tabela e seus respectivos registros e na última coluna um link para excluir o registro correspondente pelo atributo “nome” do registro.
comando do metodo excluir no meu bean: stm.execute(“delete from pessoa where nome = '” + nome + “’”);
O problema é que nao estou sabendo como capturar esse atributo nome da tabela criada na página jsp e enviar ao método no bean.
estou tentando assim: <h:commandButton value=“excluir” action="#{agenda.excluir}" /> mas ele da a mensagem de erro:
‘#{agenda.apagar}’ Method not found: {cidade=brasilia, endereco=av. w3, nome=vanessa, telefone=3223-1181}.apagar()
pelo jeito ele pega todos os campos da tabela. Tentei o seguinte no meu bean:
String valor = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(“nome”); mas tambem nao deu.
Já pesquisei aki nos fóruns e no google mas sem sucesso na busca por uma solução.
Peço socorro aos mais experientes! Como faço isso???
Consegui resolver o problema do erro JspMethodNotFoundException. Meu ManageBean estava mapeado como “agenda” e a tag <h:dataTable estava mapeada com o mesmo nome (agenda).
Agora com o debug, vejo que está entrando no método, mas a variavel da sentença SQL fica sempre como “” ou seja, não esta recebendo o valor do parametro vindo da página jsp.
public String apagar() throws SQLException {
String result = "erro";
try {
stm = con.createStatement();
stm.executeUpdate("delete from pessoa where nome = '" + nome + "'");
stm.close();
result = "ok";
} catch (SQLException e) {
System.err.println ("Erro: "+e);
result = "erro";
}
return result;
}
e na página lista.jsf
<h:commandLink action="#{agenda.apagar}">
<h:graphicImage value="imagens/excluir.gif"/>
<f:param name="nome" value="#{currentRow.value['nome']}"/>
</h:commandLink>
Já tentei de várias formas (value="#{agenda.nome}"; value="#{dados.nome}" e não estou conseguindo…
Descobri o seguinte: meu ManageBean esta mapeado como “agenda”, porém os registros estao mapeados dentro da tag <h:dataTable como “dados” (<h:dataTable value="#{agenda.lista}" var=“dados”…); assim quando eu passo o parametro “… <f:param name=“nome” value=”#{dados.nome}"/> …" com dados.nome, ele nao preenche os dados do ManageBean automaticamente pela propriedade nome (teria que ser “agenda.nome”) e por isso a propriedade “nome” sempre chega ao ManageBean vazia (" ") e este é o X da questão.
Como eu posso assimilar dados.nome (que é a variavél da dataTable) a agenda.nome (que é o que vai para o ManageBean)???