Vraptor + jquery alerts

Estou com uma dúvida na qual não consigo pensar em uma solução:

Todos sabemos que, o vraptor te deixa configurar as paginas a serem exibidas depois da execucao de um determinado método no arquivo Logic correspondente, ou seja, suponhamos que eu tenha um arquivo cliente/cadastro.ok.jsp e dentro dele, chame a action no form cliente.armazena.logic, ele ira procurar pela classe ClienteLogic, executar o método armazena, e se, tudo o correr bem, o arquivo cliente/armazena.ok.jsp que contem uma mensagem de sucesso da operação será chamada, caso contrario, posso chamar um arquivo cliente/armazena.falha.jsp, que contem a mensagem de erro.
Estes ainda, podem ser configurados no view.properties.

A duvida é: E quando eu estou trabalhando em um sistema todo com AJAX, onde requisições de páginas JAMAIS devem ser recarregadas com um refresh ? como posso fazer para que se eu receber um “ok” do metodo, chamar apenas uma funcao JS (no caso estou usando o Jquery Alerts), para mandar uma mensagem de sucesso ou falha atraves de uma caixa de dialogo (alert), sem recarregar NADA do conteudo ?

Acho que o mesmo conceito se aplicaria caso precise que o resultado de um determinado metodo, como uma lista com um resultado de busca por exemplo, apareça apenas na DIV determinada.

Alguem pode me exclarecer sobre esses pontos ?

Obrigado

No Vraptor tem o @Remotable que retorna o resultado em Json e no jquery tem uma funcion load que da load em um metodo da logic sem dar refresh na pagina.

Eu ja tinha pensado nesse @Remotable mesmo, porem nunca mechi com JSON, como eu faria para tratar esse “ok” por exemplo no lado cliente, com o JQuery ?

Sua jsp:


//function js
      $('#divMostraResultado').load('sua.getValorResultado.ajax.logic',{'param','correto'}, function (data){
                    alert(data);
        })  ;     
     
//...

Sua Logic:


public class SuaLogic{

        private String resultado;

        @Remotable
        public void getValorResultado(){
               if (1==1)
                      resultado = "foi";
                else
                       resultado ="naoFoi"

        }
        
        public String getResultado() {
            return resultado;
        }
}

ahhh coloquei um parametro ali para ser passado pela logic… so que toh com preguiça de implemtar… mas é isso aih…kkkkkk

hehehe a minha logica esta correta entao, minha duvida ficou mesmo na parte do cliente, jsp, porem com o que voce me passou, ja da para estudar e analizar como processar essa informação recebida.

Fico ainda com duas dúvidas baseado na sua resposta:

  1. sua.getValorResultado.ajax.logic --> eu ja tinha visto algo assim na documentacao do Vraptor, mas confesso que não entendi o porque do Ajax estar ali antes da Logic. Qual a finalidade especifica dele estar ali ?

  2. Essa função que eu crei:

1. //function js 2. $('#divMostraResultado').load('sua.getValorResultado.ajax.logic',{'param','correto'}, function (data){ 3. alert(data); 4. }) ; 5. 6. //...

Eu devo chama-la aonde em meu jsp ? Atraves de um OnClick no botao submit do meu form ?

Obrigado.

O ajax você coloca antes do logic sempre que você quiser usar um metodo que tenha um @Remotable, assim como você usa o logic para component (Class Logic) você usa ajax antes do logic para @Remotable
noosaaaaa ficou claro???

Sim, clarissimo !!! rsrsrs

Obrigado heim amigo !

Funcionou tudo belezinha :thumbup: … ENTRETANTO…

Mesmo eu tendo marcado o metodo com @Viewless, o Vraptor teima em direcionar a pagina para algum lugar, nem que seja para uma pagina em branco ¬¬

O metodo com @Remotable esta redirecionando??
se for estranho heim… posta a sua logic…

Ok la vai:

@Remotable @Viewless public String armazena(Core core) { String resultado=""; try { this.daoFactory.beginTransaction(); this.daoFactory.getCoreDao().atualiza(core); this.daoFactory.commit(); resultado = "ok"; } catch (Exception e) { System.err.print(e); resultado = "falha"; } finally { return resultado; } }

to com o mesmo problema, ninguém mais ae sabe?

Diego,

Estou fazendo uns testes aqui e acabei com um problema parecido com o seu.
Se eu faço o exemplo do download como em http://www.vraptor.org/pt/file-download.html
funciona ok.

Agora se eu faço um método simples assim:

@Viewless
public void load() {
		
	System.out.println("executando método com viewless!");
}

E na jsp chamo com um link simples assim:

<a href="teste.load.logic">
	TESTE!
</a>

Então sou redirecionado para uma página em branco e em endereço no browser fica http://localhost/teste.load.logic e o método é executado.

Alguma novidade?

Provavelmente a anotação do Remotable está se sobrepondo ao Viewless.

Agora a pergunta que fica é, porque o uso de Remotable e Viewless ao mesmo tempo? (Não é uma crítica, apenas quero entender o motivo)