gpt4 book ai didi

javascript - 在非 ajax 调用中在客户端执行 JavaScript

转载 作者:行者123 更新时间:2023-11-30 10:06:16 26 4
gpt4 key购买 nike

在我的应用程序中,用户可以按下按钮来创建和下载文件。这个过程需要一些时间,所以我想在此过程中阻止 UI,直到出现下载窗口。

我正在处理响应的操作方法基本上如下所示:

public void download() {
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
// set content disposition etc.
XSSFWorkbook wb = getWorkbook();
wb.write(externalContext.getResponseOutputStream());
facesContext.responseComplete();
}

在我的 JSF View 中,我触发了一个 blockUI 组件来禁用按钮,如下所示:

<p:commandButton value="Doanload" id="b" 
action="#{bean.doanload()}"
ajax="false"
onclick="PF('crBui').show();" />
<p:blockUI block=":trGrid" widgetVar="crBui" trigger="b">
<p:graphicImage value="/images/loading.gif" alt="loading..."/>
</p:blockUI>

我尝试使用 PrimeFaces RequestContext 执行一些 JavaScript 来隐藏 blockUI 组件,但这不起作用。 JavaScript 未执行:

    public void download() {
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
// set content disposition etc.
XSSFWorkbook wb = getWorkbook();
wb.write(externalContext.getResponseOutputStream());
RequestContext.getCurrentInstance()
.execute("PF('crBui').hide();");
facesContext.responseComplete();
}

如果我使用的是 ajax 调用而不是非 ajax 调用,那么文件下载将不再有效。

有什么关于如何实现我的功能的建议吗?

最佳答案

我终于使用了 PrimeFaces 'PrimeFaces.monitorDownload()'

在我看来:

<p:commandButton value="Doanload" id="b" 
action="#{bean.doanload()}"
ajax="false"
onclick="PrimeFaces.monitorDownload(start, stop);" />

<script type="text/javascript">
function start() {
PF('crBui').show();
}
function stop() {
PF('crBui').hide();
}
</script>

让 DownloadMonitor 工作的主要技巧是简单地在响应中设置一个 Cookie:

externalContext.addResponseCookie(
org.primefaces.util.Constants.DOWNLOAD_COOKIE,
"true",
Collections.<String, Object>emptyMap()
);

这样,UI 元素就会被阻止,直到出现 FileDownload 窗口,这正是我最终想要实现的。

关于javascript - 在非 ajax 调用中在客户端执行 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28992337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com