[RESOLVIDO] VRaptor - Forma de validação

bom, como você viu a mensagem tá aí, só usá-la pra mostrar na tela do jeito que vc achar melhor.

Mas como eu pego a messagem … essa é a questão…

E sobre o envio do formulário ? É correto enviar pelo método Get ? Não post ?

dá uma olhada:

{\"errors\": [{\"message\": \"Nome de rede existente.\",\"category\": \"error\"}]}

ou seja, da variável que veio na função, vc tem que chamar variavel.errors[0].message

ex:

.error(function(data) {
 var mensagem = data.errors[0].message;
  alert(mensagem); // ou algo melhor
});

o formulário tem que ser @Post, mas nesse caso vc tá fazendo um ajax ANTES de submeter o formulário, só pra verificar se a validação está correta. Como esse ajax não modifica nada no servidor, pode ser @Get sem problemas.

entendi ali em cima …

Mas nesse caso cara
Eu vou fazer essa validação na hora que enviar o formulário e se caso existir algum registro com o mesmo nome eu retorno o erro senão já faço o cadastro no banco
Então deveria nesse caso enviar por post mesmo … tem alguma forma ?

o ideal é vc no success fazer um form.submit() de verdade… algo como isso:

$('#seu-form').submit(function() {
   var form = this;
   $.getJSON(.....)
     .success(function() {
         form.submit();
     }).error(.....);
});

assim se a requisição ajax deu tudo certo vc faz o submit de tudo.

faltou uma coisa, tem que dar um return false no final desse callback de submit

Entendi … mas como eu faço para não realizar o submit no caso de erro ?

E no caso de sucesso eu não gostaria de retornar pra nenhuma outra página … mas só enviar de volta uma mensagem de sucesso que vai aparecer num alert do tipo "Cadastro realizado’.

então o que vc quer é mais parecido com esse plugin do jquery:

http://malsup.com/jquery/form/

ele transforma o submit de um form qualquer em ajax.

Cara … perfeito … agora ta redondo … da uma olhada no código…

Só to com dificuldade pra descobrir ainda como imprimir a mensagem que enviei no validator do controller no caso de erro.


  var formOptions = {
        beforeSubmit: validate,
        success: showSuccess,
        error: showError        
    };
    
    $('#newNetworkForm').ajaxForm(formOptions);
    
    function showError(responseText, status, err){
       
        console.log(status);
        alert("Errors");
    }
    
    function showSuccess(responseText, statusText, xhr, jqForm ){
        alert("Sucesso");       
    }
    
    function validate(formData, jqForm, options){
           
        
//....

coloquei esse código na função validate…

mas como no caso eu faço pra caso caia no error … ele retornar falso e cancelar o submit ?

 $.getJSON("network/validate",   
         {    
            "p_network.name" : $("#nomeRede").val()           
        
         })   
         .error(function(data) {    
                   alert("Existe rede com o mesmo nome");
                   return false;
         }) ;   

se vc vai fazer um ajaxForm já, faz a validação já no método que recebe o post do form, não precisa criar um método a mais…

daí vc consegue tratar o erro já no showError

Ok …
E no showError como receber a mensagem do validator ? To procurando aqui no console mas não to conseguindo.
Na variavel err vem o valor Not Found não a mensagem

a variavel responseText deveria ter o json, se passou por aquele onErrorSendBadRequest…

na verdade vc pode mudar esse onErrorSendBadRequest por:

validator.onErrorUse(json()).withoutRoot().from(validator.getErrors()).serialize();

o badRequest deve estar procurando uma jsp que não existe.

Ok …

Nesse código que passou o IDE não consegue resolver o json()… ta correto a escrita ?

Results.json() e esse Results é do VRaptor

Agora funcionou porém mesmo com os erros ta caindo no caso success do ajax

justo…
volta pro onErrorSendBadRequest e faz no javascript, muda o formOptions pra:

var formOptions = {  
        beforeSubmit: validate,  
        success: showSuccess,
        dataType: "json",
        error: showError          
    };  

e veja se no error aparece o json

Blz

Funcionou … porém olha que estranho.

function showError(responseText, status, err){     
        alert('teste');
        console.log(responseText);
        alert("tam"+responseText.length); 
        for(var count = 0; count < responseText.length; count++)
        {
            alert(responseText[count].message);            
        }           
        
    }
    

No Console aparece o objeto responseText com as mensagens certinho … mas vou imprimir no alert aparece undefined ?
O que fiz de errado ai ?

o responseText tá aparecendo como String ou como Object no console log?

object