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

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:

[code]public class RelatorioController
{

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

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

}[/code]

no target do seu form coloque “_BLANK”

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.

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

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?

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

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:

@Get
@Path("/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,);

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)

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.

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.

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