[RESOLVIDO] Tenho como executar um método GET sem redirecionar para outra página?

10 respostas
R

Tenho uma página JSP onde seleciono alguns filtros para a geração de um relatório.
Ao fazer o submit do form chamo o Controller do VRaptor para a geração de um relatório.
Esse relatório vai abrir o .pdf numa nova aba do navegador.

Eu não preciso ir para uma outra página... (gostaria de deixar a página JSP intacta) mas pelo nome do Path no Controller o VRaptor está me direcionando para a página relatorio/gerar.jsp
Eu vi que tenho opções para fazer redirectTo para uma outra página qualquer ou para outro controller. (voltando para o formulário)
Nesse meu caso não resolveria redirecionar novamente para o formulário.

Tenho alguma opção para não mudar de página? (sem precisar fazer o redirect para a mesma página e sem usar Ajax)?

Exemplo de Controller abaixo:

public class RelatorioController
{

@Path("/relatorio")
public void relatorio()
{
}

@Get
@Path("/relatorio/gerar")
public void teste()
{
return new ByteArrayDownload(..., "application/pdf", "relatorio.pdf");	
}

}

10 Respostas

Rafael_Guerreiro

no target do seu form coloque “_BLANK”

G

Não precisa (e nem deve) usar o target=blank. Blank abre uma nova janela.

O que você precisa é simplesmente trocar o void para Download.

Lucas_Cavalcanti

isso, e passar um true num dos parâmetros do construtor do ByteArrayDownload

Rafael_Guerreiro

Mas isso dai que vocês falaram vai efetuar um download. Pelo o que eu entendi, ele quer que abra em uma nova aba, não?

R

Valeu! Problema resolvido, todas as respostas foram úteis.

R

Lucas,

O que você disse acima funciona quando o submit é feito dentro de um form.

Estou tentando chamar o método GET que retorna o Download a partir do JQuery, pelo Firebug verifico que o arquivo foi gerado, mas o resultado não foi jogado para o browser. Pode me ajudar?

No Controller:

<a class="mention" href="/u/get">@Get</a>

<a class="mention" href="/u/path">@Path</a>("/print/{codigo}/modelo/{codigoModelo}")

public Download print(Integer codigo, Integer codigoModelo) throws DRException, Exception

{

…

}

No JSP:

var modeloDeImpresso = $(’#comboModelosImpressao option:selected’).val();
$.get(’<c:url value="/historico/print/${entity.codigo}/modelo/"/>’ + modeloDeImpresso,);

Lucas_Cavalcanti

não dá pra fazer download via jquery… vc precisa redirecionar mesmo.

isso é o browser que barra, é uma falha de segurança meio grave (senão o site poderia ficar disparando milhares de downloads na sua máquina)

R

Lucas,

Esse redirecionamento que você diz é fazer o JQuery jogar isso como target blank? Não entendi o que precisaria ser redirecionado.

Outra solução para o meu problema, seria pegar o valor do campo select do HTML para a EL só que pelo que vi isso não é possível sem o uso de JS.

Lucas_Cavalcanti

vc pode criar um link normal, pode ser com target blank…

se vc precisa mudar a url do link, dá pra fazer um truquezinho pra isso:

<a id="the-download" href="#" data-href="<c:url value="/historico/print/${entity.codigo}/modelo/"/>"/>

e no javascript:

$("the-download").click(function() {
    var href = $(this).attr("data-href");
    var modelo = //...;
    $(this).attr("href", href + modelo);
    return true; 
});

ou vc muda o href do link toda vez que mudar o select de modelo.

R

Valeu Lucas! Como sempre, funcionou a sua dica :slight_smile:

Criado 19 de abril de 2012
Ultima resposta 25 de out. de 2012
Respostas 10
Participantes 4