我正在使用PrimeFaces的下载组件和命令按钮从FTP服务器下载文件的XHTML页面。
在Tomcat服务器上运行应用程序时,打开页面并首次按下载进入下载功能并将文件成功下载到DefaultStreamedContent
对象中,但浏览器上似乎没有下载任何内容在等待我的页面下面显示的tomcat消息后,页面似乎刷新了(这只是第一次点击的全部内容)。
但是当第二次按下载时,它第二次进入下载功能并成功下载文件,但浏览器上显示的是第一个下载的文件。
此外,当我删除文件并再次启动应用程序时:首次下载时知道该文件未退出。
这是摘要的另一个案例:
注意:
我的XHTML页面代码:
<p:commandButton id="downloadButton"
value="#{messages.label_download}" icon="ui-icon-arrowthick-1-s"
onclick="PrimeFaces.monitorDownload(start, stop);"
action="#{rapportiprovaBean.handleFileDownload(rapportiprova)}"
immediate="true" style="width= 5%">
<p:fileDownload
value="#{rapportiprovaBean.fileManager.downloadedFile}" />
</p:commandButton>
我的托管bean代码:
public void handleFileDownload(Rapportiprova rapporti) {
Documenti documenti = new Documenti();
documentiService = new DocumentiServiceImpl();
fileManager = new FileManager();
try {
selectedRapportiProva = rapporti;
if (selectedRapportiProva.getIdDoc() != null) {
DDT_Server_Info = fileManager.loadDDT_Info();
documenti = selectedRapportiProva.getIdDoc();
folder = documenti.getIdRif().getDescrizione();
fileName = documenti.getDoc();
InputStream stream = fileManager.downloadDDTFile(fileName, DDT_Server_Info, folder);
if (stream != null)
{
DefaultStreamedContent streamContent=new DefaultStreamedContent(stream, FileManager.getFileContentType(fileName), fileName);
fileManager.setDownloadedFile(streamContent);
}
stream.close();
} else {
fileManager.setDownloadedFile(null);
FacesMessage facesMessage = MessageFactory.getMessage("message_error_file_not_exits",
FacesMessage.SEVERITY_ERROR);
FacesContext.getCurrentInstance().addMessage(null, facesMessage);
}
} catch (Exception e) {
FacesMessage facesMessage = MessageFactory.getMessage("message_error_download_file",
FacesMessage.SEVERITY_ERROR);
FacesContext.getCurrentInstance().addMessage(null, facesMessage);
}
fileManager.setDownloadedFile(null);
}
我的问题是,为什么文件是在内部下载的,而不是出现在第一次点击下载的浏览器上,但是在第二次点击此按钮或其他文件的任何其他按钮时,它会显示在浏览器上下载的第一个文件是不对的行为?