我的JSF应用程序应该通过单击按钮来下载zip文件,而这应该会阻止UI。下载工作正常,但Chrome的响应存在问题,因此用户界面永远不会被阻止。
以下是响应代码:
HttpServletResponse httpResponse = FacesUtil.getServletResponse();
httpResponse.setContentType("application/zip");
httpResponse.setContentLength((int) (new File(System.getProperty("java.io.tmpdir") + fileName)).length());
httpResponse.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
InputStream is = null;
OutputStream os = null;
try {
os = httpResponse.getOutputStream();
is = new FileInputStream(System.getProperty("java.io.tmpdir") + fileName);
byte[] buffer = new byte[2048];
int anz = 0;
while ((anz = is.read(buffer)) > 0) {
os.write(buffer, 0, anz);
}
is.close();
os.flush();
os.close();
FacesContext.getCurrentInstance().responseComplete();
} catch (IOException e) {
这里是xhtml:
<h:commandButton id="downloadDokumenteBtn" action="#{dokumenteUebersicht.downloadDokumente}" value="Ausgewählte Dokumente downloaden" onclick="jQuery.blockUI()">
</h:commandButton>
Chrome现在出现问题,使用开发人员工具可以看到原因:
**
资源被解释为文档但以MIME类型传输 应用程序/压缩。
**
我尝试了很多(CommandLink,各种形式,a4j:CommandLink),没有任何作用......
这个问题有解决方案吗?