Struts2-jquery-grid não deleta dados. Campo "idusuario" vem vazio
13 respostas
E
equeiroga
Bom dia pessoal,
Esse é meu primeiro post no GUJ. Espero que esteja no local correto.
Estou trabalhando com struts 2 + jquery. Tô tentando implementar uma tabela com grid. Já consegui carregar os dados e configurar as funções add e edit dos dados pela grid, mas a função del não funciona de jeito nenhum. Tô tentando fazer a exclusão dos dados pelo ID.
Segue a parte do método pra exclusão:
elseif(oper.equalsIgnoreCase("del")){
Usuariousuario=newUsuario();Stringsql="delete from usuario where idusuario=?";try{
usuario.setIdusuario(idusuario);PreparedStatementstmt=this.connection.prepareStatement(sql);stmt.setLong(1,usuario.getIdusuario());stmt.execute();stmt.close();}catch(Exceptione){
e.printStackTrace();}
Ressalto que adição e edição funcionam.
Já pesquisei em tudo quanto é lugar e não consegui solução pra isso.
Algum erro?
Por que você instancia o usuário, seta nele o ID e depois passa como argumento usuario.getId()?
E
equeiroga
drsmachado,
O idusuario vem vazio.
To usando o getId justamente pra ele verificar o usuário pelo id no banco.
Esse mesmo código funciona com formulário. O caso é que eu tô usando strtus2-jquery-grid. Deve ter alguma particularidade a mais que não consegui implementar. Já tentei seguir muitos exemplos na internet, porém, sem sucesso em nenhum deles.
drsmachado
Camarada, particularidade nenhuma.
Veja bem a m@$#%$ que está seu código aqui:
elseif(oper.equalsIgnoreCase("del")){//instanciaonovousuarioUsuariousuario=newUsuario(); Stringsql="delete from usuario where idusuario=?"; try{//setaoidusuarioqueVEMVAZIOusuario.setIdusuario(idusuario); PreparedStatementstmt=this.connection.prepareStatement(sql); stmt.setLong(1,concurso.getIdusuario()); stmt.execute(); stmt.close(); }catch(Exceptione){e.printStackTrace(); }
Manjou?
Como você está passando o idusuario para a query? Se ele vem vazio, fazer
usuario.setIdusuario(idusuario);
vai dar na mesma.
por isso ele não deleta.
E
equeiroga
Beleza,
Achei que quando selecionasse a linha, carregaria os dados, incluindo o id. Como passar isso pra grid como parâmetro então?
drsmachado
equeiroga:
Beleza,
Achei que quando selecionasse a linha, carregaria os dados, incluindo o id. Como passar isso pra grid como parâmetro então?
Camarada, isso é o que você deveria me dizer.
Como está passando esse valor (idusuario) para a Action?
E
equeiroga
drsmachado:
equeiroga:
Beleza,
Achei que quando selecionasse a linha, carregaria os dados, incluindo o id. Como passar isso pra grid como parâmetro então?
Camarada, isso é o que você deveria me dizer.
Como está passando esse valor (idusuario) para a Action?
No fundo, no fundo, essa é a pergunta do tópico.
drsmachado
Então terá de reformular ó título e o tópico original, por que, ele trata de uma dificuldade com a deleção de dados. A dificuldade é dada por uma incoerência no código que efetua a deleção, afinal, o idusuario chega nulo e está sendo passado como parâmetro para a query, mas, ao consultar se há algum registro cujo id = null, o mysql não encontra, não sendo possível, portanto, deletar.
Só será possível ajudar caso você poste os códigos da jsp e da Action, caso contrário, é ficar aqui tentando adivinhar coisas com o horóscopo do dia.
E
equeiroga
Este trecho do código é o que tenta fazer a exclusão dos dados. Não postei o restante porque tá tudo funcionando, menos isso. O problema é apenas nesta parte. Talvez vc não tenha lido a mensagem inteira. Já alterei o título tópico. Acho que não precisa desse estresse todo.
Como eu disse antes, achei que clicando na linha da grid, ele setaria os campos. Como isso não acontece, não sei mais como fazer.
Segue o execute() da action.
public String execute() throws Exception{
Usuario usuario;
if(oper.equalsIgnoreCase("add")){
usuario = new Usuario();
UsuarioDAO dao = new UsuarioDAO();
usuario.setNome(nome);
usuario.setDataAniversario(dataAniversario);
dao.cadastrarUsuario(usuario);
}
else if (oper.equalsIgnoreCase("edit"))
{
usuario = new Usuario();
String sql = "update usuario set nome=?, data_aniversario=?, where idusuario=?";
try{
usuario.setIdusuario(idusuario);
usuario.setNome(nome);
usuario.setDataAniversario(dataAniversario);
PreparedStatement stmt = this.connection.prepareStatement(sql);
stmt.setString(1, usuario.getNome());
stmt.setDate(2, usuario.getDataAniversario());
stmt.setLong(3, usuario.getIdusuario());
stmt.execute();
stmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
else if (oper.equalsIgnoreCase("del")){
usuario = new usuario();
String sql = "delete from usuario where idusuario=?";
try {
usuario.setIdusuario(idusuario);
PreparedStatement stmt = this.connection.prepareStatement(sql);
stmt.setLong(1, usuario.getIdusuario());
stmt.execute();
stmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return NONE;
}
drsmachado
Vamos por partes, então.
Perceba que no método “add”, você consegue obter o nome e a data de aniversário. Isto, por que, provavelmente estes dados são passados a partir de um form.
Por outro lado, no método “del” você não recebe o idusuario.
Como você não postou a jsp, não posso ir além.
E
equeiroga
Segue a jsp. Estou usando ajax, então esta tela está carregando dentro de outra. Se precisar da outra é só falar.
<%@taglibprefix="sj"uri="/struts-jquery-tags"%><%@taglibprefix="s"uri="/struts-tags"%><%@taglibprefix="sjg"uri="/struts-jquery-grid-tags"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>Teste</teste></head><body><s:urlaction="dpp/lista-usuarios"id="listaUsuarios"/><s:urlaction="dpp/edita-usuarios"id="editaUsuarios"/><sjg:gridid="gridtable"gridModel="gridModel"href="%{listaUsuarios}"caption="Lista de Usuarios"rowList="10, 30, 60"rowNum="10"rownumbers="true"pager="true"dataType="json"editurl="%{editaUsuarios}"navigator="true"navigatorView="true"navigatorViewOptions="{width:700}"navigatorSearch="true"navigatorRefresh="true"navigatorDelete="true"navigatorEdit="true"navigatorEditOptions="{heigth:500, reloadAfterSubmit:true}"autowidth="true"scrollrows="true"viewrecords="true"><sjg:gridColumnname="idusuario"index="idusuario"title="ID"editable="true"sortable="true"width="60"/><sjg:gridColumnname="nome"index="nome"title="Nome"editable="true"sortable="true"/><sjg:gridColumnname="dataAniversario"index="dataAniversario"title="Data de Aniversario"editable="true"formatter="date"formatoptions="{newformat : 'd/m/Y', srcformat : 'Y-m-d H:i:s'}"/></sjg:grid><sj:submitname="bt_voltar"value="Voltar"button="true"href="usuarios"targets="tab_um"></sj:submit></body></html>
drsmachado
Camarada, irei fazer um teste aqui e já te retorno.
E
equeiroga
Então pessoal,
Mais alguém???
Abraços.
E
equeiroga
Ninguém mais pessoal?
Hoje me passou pela cabeça que isso pode ser bug do plugin…