【发布时间】:2015-03-11 16:37:50
【问题描述】:
在我的应用程序中,用户可以按下按钮来创建和下载文件。该过程需要一些时间,因此我想在此过程中阻止 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 视图中,我正在触发一个 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 调用,则文件下载将不再起作用。
任何建议我如何归档我的功能?
【问题讨论】:
标签: javascript ajax jsf-2 primefaces callback