Jsf 2 在JSF2.0中成功下载文件后关闭模式
JSF页面上有一个命令链接。单击链接时,将打开一个模式。 选择模式中的下载按钮,对输入字段进行验证,然后下载文件。要求是在成功下载文件后关闭模式并返回到同一页面。当打开文件对话框显示在同一页面上时,我们如何关闭模式Jsf 2 在JSF2.0中成功下载文件后关闭模式,jsf-2,Jsf 2,JSF页面上有一个命令链接。单击链接时,将打开一个模式。 选择模式中的下载按钮,对输入字段进行验证,然后下载文件。要求是在成功下载文件后关闭模式并返回到同一页面。当打开文件对话框显示在同一页面上时,我们如何关闭模式 <h:panelGroup rendered="#{downloadBacking.showDownloadModal}"> <ui:include src="DownloadFile.xhtml" /> </h:panelGroup>
<h:panelGroup rendered="#{downloadBacking.showDownloadModal}">
<ui:include src="DownloadFile.xhtml" />
</h:panelGroup>
您的downloadFile()
方法无法以这种方式工作。每个请求只能发送一个响应。文件下载本身已经是一个完整的响应。不能向其附加其他数据;它只会损坏包含该数据的下载文件。或者,如果您正确编写了下载文件代码,您还应该看到一个非法状态异常:响应已提交
您有两种选择:
<h:commandButton value="Download" action="#{bean.downloadFile}"
onclick="some JS code here to hide the modal" />
URL可以指向一个简单的servlet,该servlet将文件从磁盘或内存流式传输您能告诉我如何保存文件服务器的临时磁盘吗。我还需要创建另一个Servlet类来存储文件,还是只需要备份bean中的代码就可以了?
file.createTempFile(前缀,后缀)
。是的,您需要创建一个servlet。这超出了JSF的责任范围,我在支持bean中创建了一个临时文件,并将内容复制到临时文件中。我创建了一个servlet。如何将临时文件从bean传递到servlet?我很困惑。请帮助我。只需在URL中传递文件名作为请求参数或路径信息。例如,pdfservlet?file=tempfilename.pdf
或pdfservlet/tempfilename.pdf
,然后使用新文件(System.getProperty(“java.io.tempdir”),filename)再次找到它。
<h:commandButton value="Download" action="#{bean.downloadFile}"
onclick="some JS code here to hide the modal" />
<h:panelGroup rendered="#{bean.downloadReady}">
<script>window.location = '#{bean.downloadURL}';</script>
</h:panelGroup>