Pessoal,
Segui as orientações do site do Vraptor para fazer a troca de dados entre a View e o controller. Consegui chamar o controller através do Json, o controller processa normalmente e devolver o valor através do result.use(json()), mas os dados não voltam para o Json. Alguém pode me ajudar?
Método do meu controller:
public void validaCPF(String cpf) {
if(dao.BuscaCpf(cpf).size()>0)
result.use(json()).from(new Success(false)).serialize();
else
result.use(json()).from(new Success(true)).serialize();
}
Meu arquivo js que faz a chamada:
var verifica = false;
$.getJSON($('#contexto').val(), {cpf : cpfAjax}, function(data){
alert('simples'+data.success[0].success);
if(data.sucsess) verifica = true;
});
O alert imprime “[objetc Object]”, mas ele não deveria imprimir: {“success”:{“success”:true}}?
Na verdade está certo, pois {“success”:{“success”:true}} é um objeto.
O alert é ruim demais para ser usado como um “debugger”. Se você estiver usando google chrome ou firefox e trocar esse alert por:
Ele vai te mostrar um objeto no console e tudo o que tem dentro dele…
Dica:
Use o withoutRoot() para deixar seu JSON mais bonito e prático:
Assim, a saída vai ser a seguinte:
Logo, para acessá-lo, vc só vai precisar fazer isso:
Rafael,
Muito obrigado pelas dicas! Ainda estou apanhando um pouco, mas com suas dicas acredito que estou no caminho!
Um abraço,
Pelo o que eu entendi dessa sua lógica, você quer verificar com ajax se o cpf digitado pelo usuário é válido, correto?
Então, existem várias formas de fazer algo nesse sentido:
- Se o CPF for válido, você retorna status 202 e trata no success do ajax, se não, vc retorna um status 500 e trata no error do ajax:
// JavaScript
$.ajax({
url: $('#contexto').val(),
data: {cpf: cpfAjax},
success: function (){
// Aqui vc faz alguma coisa se deu certo, como colocar um certinho verde ao lado do input.
},
error: function (){
// E aqui você faz algo para indicar que deu errado, como um 'x' vermelho no input.
}
});
// Java
public void validaCPF(String cpf) {
// Dá uma olhada no validador de CPF do Caelum Stella. Pois existe uma conta para verificar se é um cpf válido ou não (para isso que servem os dígitos)
if(dao.BuscaCpf(cpf).size()>0)
result.use(status()).badRequest("Esse CPF não é válido.");
else
result.use(status()).ok();
}
- Seria legal se você informasse para o seu usuário o que deu errado.
// JavaScript
$.ajax({
url: $('#contexto').val(),
data: {cpf: cpfAjax},
success: function (data){
if (data.type == 'success')
// coloca a mensagem de sucesso na tela.
else
// coloca o data.message com a mensagem de erro na tela.
},
error: function (){
// E aqui você faz um erro genérico para o seu input.
}
});
// Java
public void validaCPF(String cpf) {
Informativo informativo = null;
if (cpf == null)
informativo = new Informativo("error", "Não foi possível obter o cpf.");
if (verificaCPF(cpf))
informativo = new Informativo("error", "Esse cpf é inválido.");
if(dao.BuscaCpf(cpf).size()>0)
informativo = new Informativo("error", "Esse cpf já está sendo usado por outra pessoa.");
else
informativo = new Informativo("success", "CPF Válido!");
result.use(json()).withoutRoot().from(informativo).serialize();
}
// Informativo
public class Informativo {
private final String type;
private final String message;
public Informativo(String type, String message){
this.type = type;
this.message = message;
}
// getters
}