Perform page navigation after a file download

后端 未结 2 550
旧巷少年郎
旧巷少年郎 2021-01-01 04:52

I need to find a way to perform a page navigation after generating a file download. So far, I\'ve got the file download ready and working:

FileInputStrea         


        
相关标签:
2条回答
  • 2021-01-01 05:26

    Thanks to @BalusC I did it! From the first page i just perform the navigation and on the landing page i included the following code:

               <c:if test="#{bean.readyForDownload}">
                    <script>
                    window.onload = function() {
                        document.getElementById('form:link').onclick();
                    }
                    </script>
    
    
                <h:form id="form">
                    <h:commandLink id="link" action="#{bean.prepareFileDownload()}"/>
                </h:form>
               </c:if>
    
    0 讨论(0)
  • 2021-01-01 05:40

    You can't return 2 responses to 1 request. You can return only 1 response to 1 request. A file download counts as one response and a redirect counts as another response.

    Your best bet is to return a response which automatically initiates a new request in some way. The second response can then be returned to this automatically initiated request. JavaScript is very helpful in this with functions like window.location (to fire a new request in current window), window.open() (to fire a new request in a new window), and form.submit() (to submit a POST form).

    The simplest way would be to redirect to the target page wherein some JavaScript is conditionally rendered (and immediately executed) which in turn triggers the file download by e.g. window.location or form.submit(). The window.open() is inappropriate if the download itself is already set as an attachment. Note that this approach doesn't redirect after the user has saved the file download, this is plain impossible as there's no client side event to hook on when the last bit of the download is saved. Instead, the redirect is first performed and then the file download.

    If you've really a hard head in this, then you can always create an applet or webstart application which fully manages the saving of the downloaded file, so that you can easily perform a redirect after the last bit is saved. However, this is IMO plain clumsy (and even potentially bad for UX; for instance I personally hate this kind of "download managers" on several websites).

    0 讨论(0)
提交回复
热议问题