[RESOLVIDO] - Enviar PUT com ajaxSubmit()

Bem pessoal,

eu estava querendo fazer o seguinte, queria enviar um formulário com o parâmetro PUT usando ajaxSubmit.

como eu fiz:

  $('#cliente').ajaxSubmit(){
      url: '/cliente/salvar'
      type: 'PUT',
      success: function(){
        alert('Cliente alterado com sucesso!');
      }
      error: function(){
        alert('Cliente não alterado!');
      }
  }

no controller:

  @Path("/cliente/salvar")
  @Put
  public void altera(Cliente cliente){
    clienteDao.altera(cliente);
  }

ai ele me dá um erro quando vai pro controller ele diz q o objeto cliente está null.

ai como não estava dando certo ontem.

o que eu fiz mudei a uri na annotation path e mudei o verbo para @Post

ai deu certinho, alterou beleza.

e mudei meu javascript também né o type para POST

vc fechou o parênteses do ajax submit antes, o certo seria:

$('#cliente').ajaxSubmit({  
    url: '/cliente/salvar'  
    type: 'PUT',  
    success: function(){  
      alert('Cliente alterado com sucesso!');  
    }  
    error: function(){  
      alert('Cliente não alterado!');  
    }  
}); 

quando esse código é executado, o form #cliente está preenchido? os inputs estão com nomes: cliente.nome, cliente.endereço, etc?

estão sim lucas.

Eu preencho eles puxando os dados do servidor com a função $.getJSON e eles vem corretos. eu até vejo na tela eles preenchidos.

o problema é como te disse quando vai pro servidor vai nulo :S

há e o meu form tá assim

<form>
   id: <input type="text" name="cliente.id" id="id"></input>
   nome: <input type="text" name="cliente.nome" id="nome"></input>
</form>

tenta trocar o type pra POST, e colocar um input hidden no form:

<input type="hidden" name="_method" value="PUT"/>

rsrsrsr

NA VEIA LUCAS!

deu certo… conseguiu enviar como eu não estou com o meu projeto mesmo aqui eu fiz num exemplo que tenho e ficou assim.

form:

        <form id="cliente">
		Nome: <input type="text" name="cliente.nome" id="nome"></input>
		Endereco: <input type="text" name="cliente.endereco" id="endereco"></input>	
		<input type="hidden" name="_method" value="PUT"></input>	
	</form>
	<button type="button" id="enviar">Enviar</button>

javascript:

                $('#enviar').click(function(){
			$('#cliente').ajaxForm();
			$('#cliente').ajaxSubmit({
				dataType: 'text',
				url: '/testesvraptor/cliente/salvar',
				type: 'POST',
				success: function(){
					alert('OPA ALTEROU!');
				},
				error: function(){
					alert('OPA DEU ERRO!');
				}
			});
		});

Controller:

        @Path("/cliente/salvar")
	@Put
	public void altera(Cliente cliente){
		try {
			System.out.println(cliente.getNome());
			System.out.println(cliente.getEndereco());
			result.nothing();
		} catch (Exception e) {
			result.notFound();
		}			
	}

mais uma vez! VLW Lucas… eu até q tinha pensado nisso ontem, mas já era 2 da matina ai num dava mais né kkkkkkkkk’

mas assim lucas,

não aconselhável usar o PUT?

os browsers não implementam o PUT nem o DELETE direito, então a gente tem que apelar pro input hidden mesmo

vc não precisa da chamada do ajaxForm… ou vc faz ajaxForm, ou faz ajaxSubmit

há entendi…

eu pensei que não dava era pra usar de jeito nenhum…

mas lucas… no meu caso o mesmo form eu uso para POST e PUT… teria como eu mudar isso ou tem q “trabalhar” mesmo pra manipular quando for put e post?..

se vc for usar o ajaxSubmit, tente tirar o input hidden e fazer dentro das opções do ajax:

data: {'_method': 'PUT'}

[quote=Lucas Cavalcanti]se vc for usar o ajaxSubmit, tente tirar o input hidden e fazer dentro das opções do ajax:

data: {'_method': 'PUT'} [/quote]

quando crescer quero ser igual o lucas heheehe :smiley:

deu certo cara! agora é só manipular hehehe

vlw!