栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JSF文件下载异常处理(如何防止视图重新呈现)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JSF文件下载异常处理(如何防止视图重新呈现)

为了防止重新加载整个页面,您必须通过ajax提交表单。但是,为了能够下载文件,您必须关闭ajax。一起做得不好。

最好的选择是将操作分为两个请求。首先发送一个ajax请求,该请求将在服务器端的临时位置创建文件。如果失败,则可以按常规方式显示人脸消息。成功后,您可以通过有条件呈现的Javascript提交隐藏的非ajax命令按钮来自动触发第二个请求。然后,第二个请求可以将已经成功创建的文件从临时位置流式传输到响应。

之前已经提出并回答了类似的问题:有条件地提供文件下载或显示导出验证错误消息。但这涉及PrimeFaces和OmniFaces。以下是标准的JSF方法:

<h:form id="form">    ...    <h:commandButton value="Export" action="#{bean.export}">        <f:ajax ... render="result" />    </h:commandButton>    <h:panelGroup id="result">        <h:messages />        <h:commandButton id="download" action="#{bean.download}"  />        <h:outputscript rendered="#{not facesContext.validationFailed}"> document.getElementById("form:download").onclick();        </h:outputscript>    </h:panelGroup></h:form>

并使用此

@ViewScoped
bean(逻辑基于您现有的逻辑)。基本上,只需
File
在导出操作(ajax)中获取as实例变量,然后在下载操作(非ajax)中将其流式传输即可。

private File pdfFile;public void export() {    try {        pdfFile = pdfService.getPdfReport(...);    } catch (Exception e) {        context.addMessage(...);    }}public void download() throws IOException {    DownloadUtils.exportPdf(pdfFile);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/449076.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号