Struts2-jquery-grid não deleta dados. Campo "idusuario" vem vazio

13 respostas
E

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:

else if (oper.equalsIgnoreCase("del")){
			Usuario 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();
			}

Ressalto que adição e edição funcionam.

Já pesquisei em tudo quanto é lugar e não consegui solução pra isso.

Agradeço a atenção de todos.
Ewerton Queiroga

13 Respostas

drsmachado

Algum erro?
Por que você instancia o usuário, seta nele o ID e depois passa como argumento usuario.getId()?

E

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:

else if (oper.equalsIgnoreCase("del")){   
            //instancia o novo usuario
            Usuario usuario = new Usuario();   
            String sql = "delete from usuario where idusuario=?";   
               
            try {   
                //seta o idusuario que VEM VAZIO
                usuario.setIdusuario(idusuario);   
                   
                PreparedStatement stmt = this.connection.prepareStatement(sql);   
                stmt.setLong(1, concurso.getIdusuario());   
                stmt.execute();   
                stmt.close();   
                   
            } catch (Exception e) {   
                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

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

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

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

Segue a jsp. Estou usando ajax, então esta tela está carregando dentro de outra. Se precisar da outra é só falar.

<%@taglib prefix="sj" uri="/struts-jquery-tags" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<%@taglib prefix="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:url action="dpp/lista-usuarios" id="listaUsuarios" />
	<s:url action="dpp/edita-usuarios" id="editaUsuarios" />
	
	<sjg:grid 
		id="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:gridColumn name="idusuario" index="idusuario" title="ID" editable="true" sortable="true" width="60"  />
		<sjg:gridColumn name="nome" index="nome" title="Nome" editable="true" sortable="true"  />		
		<sjg:gridColumn name="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:submit name="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

Então pessoal,

Mais alguém???

Abraços.

E

Ninguém mais pessoal?

Hoje me passou pela cabeça que isso pode ser bug do plugin…

Criado 2 de fevereiro de 2012
Ultima resposta 6 de fev. de 2012
Respostas 13
Participantes 2