Verificar disponibilidade de username com jquery + vraptor

4 respostas
demiante

Pessoal, minha dúvida é de novato. Comecei a mexer com jquery e ajax ontem e parei neste problema em particular.

Não entendo direito como faço para verificar a disponibilidade de um username utilizando jquery para direcionar para um controller do vraptor.

Tenho o seguinte no meu jsp:


This username is not available
...

E coloquei o script da seguinte forma:

Tenho um controller chamado UserController e ele possui o método check. A pergunta é: como faço para receber o username no método do controller e como faço para responder corretamente? Coloquei o sysout no método check do controller e parece que a chamada sequer está ocorrendo.

Enfim, agradeço qq ajuda.

4 Respostas

Lucas_Cavalcanti

tem vários jeitos de fazer isso, depende de como vc quer que seja a usabilidade…

se vc quer fazer a verificação quando o usuario submete o formulário, faça:

$('#id_do_form').submit(function() {
   var check = false;
   $.ajax({
      url: '/user/check',
      data: {username: $('#id_do_campo_de_login').val()}
      success: function(data) {
            check = data == 'true'; //ou algo do tipo
      }
   });
   if (!check) {
        alert("usuario já existe");
   }
   return check;
});

assim qdo clicar no submit ele valida…

vc pode trocar o $(’#id_do_form’).submit()
por $(’#id_do_campo_de_login’).blur(), daí
ele vai validar qdo o usuário sair do campo login

demiante

Oi Lucas, valeu pela ajuda. Essa solução de jQuery ficou muito mais elegante do que a função que eu estava tentando usar antes.

Contudo, meu maior problema permanece: não entendo porque o método check(String username) do meu controler UserController não está sendo chamado. O que posso estar fazendo errado? Fiz uma função que simplesmente retorna true e nada acontece (já testei fazendo retornar falso e nada muda).


@Resource
public class UserController {


public boolean check(String username) {
System.out.println(username);
return true;
}

}

Lucas_Cavalcanti

o problema é que qdo vc faz o ‘/user/check’, ele pega da raíz, ou seja, ele vai chamar http://localhost:8080/user/check

vc precisa colocar o contexto aí também… ou vc faz ‘/contexto/user/check’ ou, se vc tá dentro de uma jsp, faça

...

 url : '<c:url value="/user/check"/>',
...
demiante

Valeu. Está funcionando agora. :slight_smile:

Criado 2 de outubro de 2010
Ultima resposta 5 de out. de 2010
Respostas 4
Participantes 2