jQuery + VRaptor

Fala Pessoal,
Blz?

Dúvida cruel… Será que alguém sabe como faço para receber as variáveis da minha lógica?

Exemplo: No meu Controller eu fiz assim:

result.include(“msg”, “Registro Alterado”);

No JSP eu tenho um formulário simples que estou submetendo com jQuery assim:


jQuery.ajax({
	url: '/funcionarios',
	dataType: 'html',
	type: 'POST',
	timeout: 5000,
	data: serializeDados,
	beforeSend: function(){
		jQuery('#carrega').html('Carregando...');
	},
	success: function(data, textStatus){
		jQuery('#msg').html('Quero Minha Variável Aqui');
	},
	complete: function(){
		jQuery('#carrega').empty();
	},
	error: function(xhr, er){
		jQuery('#msg').html(xhr.statusText);
	}
});

Como faço para receber minhas variáveis do servidor e mostrar na tela???

Abraço à todos…

Marcelo

cara

${msg }

não funciona?

Pois é meu amigo,

Eu também achei que seria assim, mas não funcionou…

Deve ter algum detalhe a mais aí…

Abs.

Marcelo

[quote=mribeiro]Fala Pessoal,
Blz?

Dúvida cruel… Será que alguém sabe como faço para receber as variáveis da minha lógica?

Exemplo: No meu Controller eu fiz assim:

result.include(“msg”, “Registro Alterado”);

No JSP eu tenho um formulário simples que estou submetendo com jQuery assim:


jQuery.ajax({
	url: '/funcionarios',
	dataType: 'html',
	type: 'POST',
	timeout: 5000,
	data: serializeDados,
	beforeSend: function(){
		jQuery('#carrega').html('Carregando...');
	},
	success: function(data, textStatus){
		jQuery('#msg').html('Quero Minha Variável Aqui');
	},
	complete: function(){
		jQuery('#carrega').empty();
	},
	error: function(xhr, er){
		jQuery('#msg').html(xhr.statusText);
	}
});

Como faço para receber minhas variáveis do servidor e mostrar na tela???

Abraço à todos…

Marcelo[/quote]

Cara… o include funciona com chave e valor…

na seu sucess vc está recebendo dois parâmetros e lá no controller vc está enviando só um…
Aqui no meu sistema tem assim no include:

result.include("listaFornecedores",listaFornecedoresCombo );

e no meu JSP eu pego assim:

 <c:forEach items="${listaFornecedores}" var="fornecedor">

Acho q pod ser isso aí…
Mas tbm sou novo no VRpator… posso estar errado…

Pois é… Quando mando mostrar minha variável direto na JSP funciona normal, o problema é que estou fazendo a requisição via AJAX, então no success do ajax eu gostaria de receber a resposta do servidor.

Acredito que a grande sacada deve estar dentro do SUCCESS do ajax, tipo:

success: function(data, textStatus){
			jQuery('#msg').html('como resgatar minha variável aqui');
		},

Na documentação, diz que a resposta do servidor entra nesse argumento “data” da função success, mas como chegar nela? Se eu peço para exibir o “data” ele retorna a própria página do formulário…

Abs.

Marcelo

vc pod fazer com JSON…

Olha aqui um exemplo

$.postJSON(
			'<c:url value="/classeController/buscarCotaPorNumero" />',
			{ "numeroCota": numeroCota },
			function(result) {

				$("#nomeCota").html(result);
				
			},
			null,
			true
		);

e no metodo retorna assim:

this.result.use(Results.json()).from(nomeCota, "result").recursive().serialize();

Opa… Essa dica parece ser o caminho…

Tenho um metodo que retorna um JSON com os seguintes dados:

{

    "funcionario": {
        "@resolves-to": "funcionario",
        "codigo": 56,
        "nome": "Marcelo",
        "telefone": "98908909"
    }

}

Ou seja, esses dados são retornados para SUCCESS após gravar o registro, mas como chegar no nome do funcionário?

Detalhe: Essa é a forma mais profissional? ou será que estou dando a volta ao mundo?

O objetivo é simplesmente gravar os dados de um formulário simples e depois de gravar retornar o ID do funcionario…

Abs.

Marcelo

Posta o método retorna esse JSON aí e vamos tentar achar uma solução…

Vamos lá…

O Método é esse:

@Get @Path("/funcionarios/editar/{codigo}")
public void editaFunc(Integer codigo){
	Funcionario func = dao.carrega(codigo);
	result.use(JSONSerialization.class).from(func).serialize();
}

Essa é minha função jQuery:

jQuery('#form01').submit(function(e){
	e.preventDefault();
	var serializeDados = jQuery('#form01').serialize();
	jQuery.ajax({
		url: '<c:url value="/funcionarios" />',
		dataType: 'html',
		type: 'POST',
		data: serializeDados,
		success: function(data, textStatus){
				
			jQuery('#msg').html('AQUI NAO SEI COMO PEGAR O NOME DO FUNCIONARIO');
		}
	});
	
});

O formulário é submetido via AJAX, o registro é inserido no BD, tudo tranquilo… Mas depois de gravar o registro eu quero retornar os dados do funcionário, porque aí tenho tudo na mão, inclusive o ID do registro…

Mas a dúvida é: Como acessar o NOME do funcionário gerado no JSON?

Outra dúvida: Esse procedimento é o mais coerente?

Valeu mesmo pela ajuda!

Abs.

Marcelo

[quote=mribeiro]Vamos lá…

O Método é esse:

@Get @Path("/funcionarios/editar/{codigo}")
public void editaFunc(Integer codigo){
	Funcionario func = dao.carrega(codigo);
	result.use(JSONSerialization.class).from(func).serialize();
}

Essa é minha função jQuery:

jQuery('#form01').submit(function(e){
	e.preventDefault();
	var serializeDados = jQuery('#form01').serialize();
	jQuery.ajax({
		url: '<c:url value="/funcionarios" />',
		dataType: 'html',
		type: 'POST',
		data: serializeDados,
		success: function(data, textStatus){
				
			jQuery('#msg').html('AQUI NAO SEI COMO PEGAR O NOME DO FUNCIONARIO');
		}
	});
	
});

O formulário é submetido via AJAX, o registro é inserido no BD, tudo tranquilo… Mas depois de gravar o registro eu quero retornar os dados do funcionário, porque aí tenho tudo na mão, inclusive o ID do registro…

Mas a dúvida é: Como acessar o NOME do funcionário gerado no JSON?

Outra dúvida: Esse procedimento é o mais coerente?

Valeu mesmo pela ajuda!

Abs.

Marcelo[/quote]
No seu metodo vc está enviando o objeto todo… tenta mandar só o nome

result.use(JSONSerialization.class).from(func.getNome).serialize();

Cara consegui pegar o nome fazendo assim:

jQuery(’#msg’).html(data.funcionario.nome);

Maravilha… Agora só falta saber como fazer para pegar o valor de uma variável disponibilizada pela lógica no VRaptor…

Exemplo:

result.include(“msg”, “Registro Gravado!”);

Preciso pegar essa msg no retorno, exemplo:

jQuery(’#msg’).html(${msg}); <-- Mas isso não funciona…

Abs.

Marcelo

se vc usa:

result.use(Results.json()).from(funcionario, "funcionario").serialize();

vc consegue acessar as propriedades dele através do data:

jQuery.ajax({  
        //....
        dataType: 'json',  
        success: function(data){  
            jQuery('#msg').html(data.funcionario.nome);  
        }  
    });  

se preferir vc pode usar o withoutRoot:

result.use(Results.json()).withoutRoot().from(funcionario).serialize();

e no jquery receber funcionario direto:

jQuery.ajax({  
        //....
        dataType: 'json',  
        success: function(funcionario){  
            jQuery('#msg').html(funcionario.nome);  
        }  
    });  

Olha aí, mribeiro!!
O pai do vraptor deu uma solução bacana…
Eu não sabia dessa de colocar o data.funcionario.nome
Isso é bom pra caramba!!!

Puts cara…

Tb. gostei dessa solução, mas está difícil de dominar esse vraptor com jquery… rsrsrs

Toda hora eu travo em alguma coisinha…

Se com result.include(‘var’, ‘textVar’), podemo disponibilizar informação p/ view, teóricamente essa var deve chegar do SUCCESS, será que estou viajando???

Caso contrário eu vou ter que criar muitas JSP’s de retorno… Como você faz? Seus projetos geralmente tem muitas JSP’s???

Abs.

Marcelo

cuidado: qdo vc faz o result.include, a variável vai pra JSP… o javascript não é executado no jsp, e sim no html gerado, já no browser do cliente, não dá pra acessar essas variáveis…

você só consegue acessar valores no success se vc mandar via json e montar o html, ou redirecionar pra uma jsp que tem o pedaço de html que vc precisa…

json é o jeito mais fácil talvez.

Lucas,

Mas me diz uma coisa, toda vez que eu executar uma lógica (vraptor) e eu incluir uma variável com alguma informação (result.include) eu tenho que criar fragmentos de HTML no JSP, para poder receber no meu SUCCESS do jQuery???

A tendência então é eu ter inúmeros JSP’s com fragmentos de páginas… é isso mesmo que entendi???

Caso contrário eu gero JSON e mando para o SUCCESS e faço o que eu quiser, certo? Mas como gerar um JSON simples, por exemplo para substituir o result.include, vamos imaginar que preciso retornar para o SUCCESS os dados do funcionario gravado e uma mensagem de “Registro Gravado”, como eu poderia gerar um JSON assim?

{

    "resultado": {
        "nome": "Jesus Cristo é Tudo",
        "telefone": "11-7221-0259",
        "msg": "Registro Gravado!"
    }

}

Isso é possível?

Abs.

Marcelo

sim, só criar uma classe com esses dados:

public class Resultado {
     private String nome;
     private String telefone;
     private String msg;
}

preencher os dados e mandar serializar =)

Mas sempre que eu quiser mandar uma informação nova vou ter que mudar minha classe???

Esse retorno para o SUCCESS pode ser muito variado, vai depender do que eu preciso executar, vou ter que criar várias classes???

Acho melhor devolver fragmentos de HTML mesmo, o que acha?

Abs.

Marcelo

faça aquilo que vai deixar o código mais simples…

se acha melhor já deixar o html pronto, faça isso…

você pode até fazer jsps que geram json’s se vc quiser :wink:

ou você pode tentar serializar um Map<String,Object> com todos os dados que vc precisa.

Maravilha Lucas e Lazaro…

Obrigado pela ajuda…

Vou pesquisar sobre essas dicas.

Abs.

Marcelo