Como posso exibir a mensagem pelo flash.message no gsp após um download de arquivo no IE
03/07/2012 14:19
0
Bom dia galera.
Estou com um problema e preciso da ajuda de vcs.
Tenho um botão no meu gsp que gera um arquivo CSV e o exibe para download.
Essa parte funciona perfeitamente , mas no final do download do arquivo, preciso mostrar
uma mensagem no gsp informando que o arquivo foi criado com sucesso.
Já tentei de tudo , render, redirect , return e response.setHeader("Refresh", "3");
Mas nada funciona , alguém tem uma solução que possa me ajudar ?


flash.message = "Arquivo gerado com sucesso !"
//redirect(action:'show', params:[id:params.id])
//Executando o download do arquivo gerado
response.setHeader("Content-Type", "application/octet-stream;")
response.setHeader("Content-Disposition", "attachment;filename=\" ${fileName}\"")
response.setHeader("Content-Length", "${inputFile.size()}")
//Não funciona no IE
response.setHeader("Refresh", "3");
response.outputStream << inputFile.text.bytes
Tags: Como posso exibir a mensagem pelo flash.message download arquivo


0
Amigo, o que você tenta possui uma restrição que se aplica a qualquer tecnologia de desenvolvimento Web.

O comportamento que você quer só com uma solução assim meio "gambiarra", serve?


0
Bem , se funcionar e não for o setTimeout do JavaScript para dar um refresh automático na
página, manda ver .....


0
Ok.

Bem, Não se pode exibir uma página com uma mensagem e ao mesmo tempo forçar o download de um arquivo (no caso CSV). Ao mesmo tempo não, mas conheço uma técnica "alternativa" (leia-se "gambiarra") para que pareça que foi isso que ocorreu.

Lá vai:

Quando desejar exibir tua página e "ao mesmo tempo" forçar o download de um CSV, na verdade você deve apenas exibir um GSP com um iframe (sei, "old school", mas avisei) cujo "src" contenha o mapeamento e os parâmetros que apontam para sua ação que realmente provoca o download do arquivo.
Por isso o usuário terá a impressão que ao mesmo tempo teve um download e uma página renderizada.
Assim, seu GSP fica +- assim:

... tua mensagem e demais HTML aqui ...
<iframe src="tua-url-que-gera-cvs-ja-com-os-parametros" style="display:none"></iframe>


0
Obrigado por responder.
Na verdade , não é ao mesmo tempo.
Quero exibir a mensagem após a action que chamo pelo botão.
No topo da página tem a tag de mensagens que é exibida se eu der um F5 pq o objeto flash.message
está com a mensagem de sucesso.
Mas vou tentar o que você está sugerindo.
Se no GSP pelo menos tivesse um re-render rolava , mas ......

Obrigado.


0
Então, Davidson.

A ideia é que, após clicar no botão (ou link) que antes só levava ao download do arquivo, você na verdade abre outra página GSP que força o download e exibe nela mesma a mensagem de sucesso "ao mesmo tempo".

Pode ser até o mesmo GSP do inicio do ciclo, que através de um <g:if> cria ou não o <iframe>, entendeu? ;)



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto