JS function not triggered with PrimeFaces.monitorDownload

jsf, jsf-2, primefaces

Solution

it's a bug.

The main bug is in `FileDownloadActionListener` of `org.primefaces.component.filedownload` package.

Line 65

externalContext.addResponseCookie(Constants.DOWNLOAD_COOKIE, "true", Collections.<String, Object>emptyMap());

The `Constants.DOWNLOAD_COOKIE` is "primefaces.download", and it's never sent with the response.

That would cause `PrimeFaces.monitorDownload`'s Interval to never call the stop function, since the cookie is never written.

Problem

I'm working in file downloading with Primefaces 4.0. I just want to trigger a JS function when download completes, but seems not to work (tried in Firefox and Google Chrome). My test case looks similar to what's done in the PF docs: ``` <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui"> <h:head /> <h:body> <script type="text/javascript"> function startMessage() { alert("Download started!"); } function finishMessage() { alert("Download finished!"); } </script> <h:form> <p:commandButton value="Download" ajax="false" icon="ui-icon-arrowreturnthick-1-s" onclick="PrimeFaces.monitorDownload(startMessage, finishMessage)"> <p:fileDownload value="#{bean.file}" /> </p:commandButton> </h:form> </h:body> </html> ``` ``` @ManagedBean @ViewScoped public class Bean implements Serializable { public StreamedContent getFile() { return new DefaultStreamedContent(new ByteArrayInputStream(new byte[0])); } } ``` The alert is triggered when download starts, but not when download finishes. Could anyone else give it a try?

Original source