提问人:Asyraf Dayan 提问时间:8/28/2023 最后编辑:BalusCAsyraf Dayan 更新时间:8/28/2023 访问量:35
通过 <p:commandButton ajax=“false”> 下载文件时如何使用 <p:blockUI>?
How to use <p:blockUI> while downloading a file via <p:commandButton ajax="false">?
问:
只是为了回答这个问题,我目前正在开发的应用程序正在使用 JSF2.0、PrimeFaces3.3 和 Liferay6.1.1。
文件下载的当前实现可以正常工作,尽管它同步运行并在浏览器中成功下载。下面是用于启动下载的 commandButton 和 managedBean 方法。
命令按钮
<p:commandButton value="#{lbl['lbl.btn.download']}"
style="float:right;" ajax="false"
action="#{backingBean.downloadZipFile}" />
托管Bean
private void downloadZipFiles() throws IOException, FileNotFoundException{
String sourceFile = "C:/Users/dev/Documents/test.txt";
String zipFileName = "TestZip";
PortletResponse portalresponse = (PortletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
HttpServletResponse response = PortalUtil.getHttpServletResponse(portalresponse);
response.setContentType("application/zip");
response.setHeader("Content-Encoding", "gzip");
response.setHeader("Content-Disposition", "attachment; filename="
+ zipFileName + ".zip");
try {
ZipOutputStream zipOut = new ZipOutputStream(new BufferedOutputStream(
response.getOutputStream()));
File fileToZip = new File(sourceFile);
FileInputStream fis = new FileInputStream(fileToZip);
ZipEntry zipEntry = new ZipEntry(fileToZip.getName());
zipOut.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while((length = fis.read(bytes)) >= 0) {
zipOut.write(bytes, 0, length);
}
zipOut.closeEntry();
zipOut.close();
fis.close();
response.flushBuffer();
FacesContext.getCurrentInstance().responseComplete();
} catch (Exception e) {
e.printStackTrace();
}
}
问题
我需要做的要求是在调用下载方法时添加一个 BlockUI。但从我所读到的内容来看,文件下载似乎不适用于 Ajax。
在 jsf 页面中使用 commandButton 下载文件
例如,加载程序在方法完成后显示并隐藏,并且在调试中运行代码时,它甚至通过而不会发生异常。问题是下载永远不会在浏览器中开始。当我将ajax设置为false时,它可以正常工作。
<p:blockUI block=":form" widgetVar="blockWidget">
<h:graphicImage value="/css/images/ajax-loader.gif"></h:graphicImage>
</p:blockUI>
<p:commandButton value="#{lbl['lbl.btn.download']}"
style="float:right;" ajax="true" onstart="blockWidget.show();" oncomplete="blockWidget.hide();"
action="#{backingBean.downloadZipFile}" />
关于如何在构建 zip 时添加加载器的任何建议?
答: 暂无答案
评论