目的是在服务器准备下载文件时显示等待微调器图标。在我的用例中,我正在生成一个大型报告,在调用浏览器的下载/另存为提示之前,服务器端需要一些时间。我可以向等待微调器展示没有问题,但找不到清除它的方法。
当前相关代码:
<h:commandButton id="generate" value="Generate Report" type="submit"
action="#{bean.generateReport()}"
onclick="#{rich:component('waitIcon')}.start();"/>
<a4j:status id="waitIcon">
<f:facet name="start">
<h:graphicImage value="/images/ai.gif" alt="ai" />
</f:facet>
</a4j:status>
哪里bean.generateReport()
是需要 1-10 秒服务器端的操作,然后吐回下载响应。
这是使用 Richfaces a4j:status 指示器,因为它提供了有用的 API,例如 .start() 和 .stop() 但它也可以是任何 dom 元素并设置可见性。问题是我无法获得正确的事件来挂钩。我需要捕获类似 onresponsereceived 的东西......
我尝试过的解决方案:
Usinga4j:commandButton
提供了一个oncomplete
事件,但该按钮会生成一个 AJAX 请求,该请求无法开始下载。(参见h:command button oncomplete action)
使用window.timeout
函数调用.stop()
组件。这在功能层面上有效,但由于生成时间在 1-10 秒之间波动很大,这使得指标有点不反映现实。
有人对处理这个有什么好主意吗?