[RESOLVIDO] Renderizando resposta em um modal - VRaptor + ajax

Boa noite prezados.

Gostaria de carregar a resposta de uma requisição em um modal que se encontra em um jsp separado do jsp atual com ajax e estou tendo dificuldades para tal.

Alguém tem alguma sugestão de como fazê-lo? Minha finalidade é otimizar o carregamento da pagina pois quero carregar somente as informações do modal porém sem ter que preenche-lo na mão via javascript (imagino que essa nao seja a única opção)

Não há necessidade do modal estar separado, porém quero apenas que carregue o conteúdo dele no momento da requisição.

Lógica

	@Path("/produto/{produto.id}")
	public void produto(Produto produto){
             ....
             // imagino que tenha que alterar algo aqui porém nao sei o que.
             result.use(Results.referer()).redirect();
        }

Função ajax que faz a requisição

	function carregaModalAdicionaPedido(produto){
		var url = "${pageContext.request.contextPath}/estabelecimento/produto/"+produto;
		$.ajax({
			type: 'GET',
			url: url,
			dataType: 'text',
			cache: 'false',
			success: function(data){
				$('#divModalAdicionaProdutoResposta').html(data); // aqui nao sei o que fazer, e com certeza isso aqui esta errado pois esta inserindo a pagina toda ao inves de somente o conteudo do modal
				$('#divModalAdicionaProdutoResposta').show();
			} 
	});       
   pagina que chama o modal
       .... blla bla bla
       <div id="divModalAdicionaProdutoResposta">
		<%@ include file="modalAdicionaProduto.jsp"%>
       </div>
    modalAdicionarProduto.jsp
        <div id="dialog" title="Adicionar produto na comanda">
	       <div id="modal">
   		    <form action="<c:url value='/estabelecimento/adicionaNaComanda' />"
		          onsubmit="return (validar());"	method="post" id="formProdutoSelecionado" name="formProdutoSelecionado">
			   <c:if test="${comanda.produto.pizza}">
                                       <c:forEach var="pizza" items="${comanda.listaPizzas}">

                       ....... bla bla bla
      </div>

Quem quiser visualizar o problema de perto, segue o link do sistema nessa parte.
http://premium.apetiteweb.com.br/cliente/estabelecimento/cardapio

Clique em qualquer produto. O Modal que está abrindo está recarregando a página toda só para apresentar as informações do modal.
O site inteiro está assim. Feio de mais rs Está me dando vergonha rs :oops:

P.S.: Se alguém quiser me dar mais sugestões para otimização do resto do site vou receber com muito apreço :smiley: hehe

Pessoal, consegui o que queria nesse post - http://www.guj.com.br/java/288780-resolvido-vraptor---renderizar-mesmo-jsp-em-duas-actions

coloquei o retorno da requisição sendo o proprio modal que desejava renderizar:

resposta

result.use(Results.page()).forwardTo("/WEB-INF/jsp/estabelecimento/modalAdicionaProduto.jsp");

chamada

<script type="text/javascript">
		function carregaModalAdicionaPedido(produto){
			var url = "${pageContext.request.contextPath}/estabelecimento/produto/"+produto;
			$.ajax({
				type: 'GET',
				url: url,
				dataType: 'text',
				cache: 'false',
				success: function(data){
					$('#divModalAdicionaProdutoResposta').html(data);
					jQuery('#dialog').dialog({
						autoOpen: false,
						width: 750,
						modal: true,
						
					});
					
					jQuery('#dialog').dialog('open');
				} 
			});
           }
</script>

Não use o jsp diretamente… É uma péssima prática…

Use o result.of(Controller.class).action();

Assim como eu expliquei naquele tópico que você mesmo usou como base.

Outra dica, se vc usa o VRaptor mais novo, você pode usar o ${linkTo[Controller].action} para acessar a url da sua action… Ou seja, vc não precisa se preocupar com a action, o VRaptor vai colocá-la para você ali…

Por exemplo, sua url poderia ficar assim:

var url = '${linkTo[EstabelecimentoController].produto["{0}"]}'.replace(/\{0\}/g, produto);

Muito bom!
Obrigado mesmo! :slight_smile: