Passar uma lista com ajax para Spring Controller

4 respostas
D

Boa noite pessoal,

Estou com o seguinte problema, estou desenvolvendo com Spring MVC e JQuery com Ajax para a comunicação do meu Controller com meu Form. Em determinado momento eu tenho que fazer uma busca e para isso eu tenho que passar uma lista com alguns parâmetros para o meu Controller. Eu tentei criar uma lista na mão em javascript e passar essa lista para meu controller, porém não estou tendo sucesso. Outra coisa que eu tentei também é transformar essa minha lista em um json e receber como String e depois deserializar, mas também sem sucesso.

Alguém saberia me dizer como posso fazer isso?

Obrigada

Bjs!

4 Respostas

M

Cara já fiz algo parecido com isso mas tá em casa. Usando JQuery vc consegue fazer uma requisição ajax. No seu controller vc deve colocar a anotação @ResponseBody para que o Spring saiba q não deverá retornar uma view, apenas um JSON (supondo q vc está utilizando JSON). Vc deve criar um script (javascript) para tratar o retorno.

M

Fiz um cadastro de usuários. Toh usando uma biblioteca pra validação q usa jquery. Criei o seguinte script q valida o formulário antes de enviar:

function validarFormulario(){ $('#usuario').validate({ rules:{ nome:{required: true, rangelength:[3,50]}, sobrenome:{required: true, rangelength:[3,50]}, username:{required: true, rangelength:[3,25]}, password:{required: true, rangelength:[6,30]}, repSenha:{required: true, equalTo: "#password"}, email: {required: true, email: true} }, submitHandler: function(form){ $("#enviar").attr("disabled","disabled"); $.post('salvar.html', $('#usuario').serialize(), function(data){ salvar(data); //crie esta função q vai receber o JSON de retorno e tratá-lo }); } } ); }

No controller fiz algo parecido com isso:

@RequestMapping(value="/blablabla", method=RequestMethod.POST) public @ResponseBody Map<String, String> blablabla(@Valid Usuario usuario, BindingResult result){ Map<String, String> json = new HashMap<String, String>(); try{ //tenta salvar no banco json.put("sucesso", "sucesso"); return json; } catch (DataIntegrityViolationException e) { json.put("erro", "tipoerro"); return json; } catch (Exception e) { json.put("erro", "inesperado"); return json; } }
Algumas coisas eu simplifiquei para nao expor o código totalmente e não confundi-lo.
Dá uma olhada em http://blog.springsource.org/2010/01/25/ajax-simplifications-in-spring-3-0/ tem um outro exemplo. Foi a partir deste tópico q comecei a mexerr com ajax no spring. Me ajudou bastante. Detalhe para usar

D

melges, em primeiro lugar, obrigada por me ajudar.

Fiz um exemplo seguindo aquele que você me mandou e o da documentação. Tentei passar um json para o Controller, algo assim

var jsonTeste = {"teste":[{"codigo":"2","nome":"Teste1"},{"codigo":"3","nome":"Teste"},{"codigo":"5","nome":"Teste2"}]}; 
	
 $.postJSON(storage.url+'/busca/avancada/resultado/', jsonTeste, function(data) {
		 alert(data);
 });

No meu Controller fiz algo desse tipo

@RequestMapping(value="busca/avancada/resultado/",method=RequestMethod.POST)
public void resultadoBuscaAvancada(@RequestBody Teste teste,HttpServletResponse response){
	String testes = teste.getNome();		
}

class Teste{

	private Long codigo;
	private String nome;
	public Long getCodigo() {
		return codigo;
	}
	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	
}

Mas aparece o seguinte erro

Uncaught TypeError: Object function ( selector, context ) {
		// The jQuery object is actually just the init constructor 'enhanced'
		return new jQuery.fn.init( selector, context, rootjQuery );
} has no method 'postJSON'

Tentei alterar meu json, mas sem sucesso… Você consegue ver o que está incorreto?

[]s

W

dsystem, está dizendo que o método postJSON não existe. O jquery tem o método getJSON, mas não o postJSON.

Se você simplesmente vai buscar algo do servidor, use get e não post. Aí você pode usar o método getJSON. Se você quiser mesmo usar POST, use o método post e especifique o datatype como json:

$.post(url, data, function(data) {...}, 'json');
Criado 18 de julho de 2012
Ultima resposta 19 de jul. de 2012
Respostas 4
Participantes 3