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 