宁波电子商务网站建设,优购物官方网站手机版,网站建设 jz.woonl,链接生成器ajax异步监控最近#xff0c;在JSF中处理新图表和图表“导出服务”时#xff0c;我遇到了一个非常普遍的问题。 当您执行长时间运行的任务#xff08;操作#xff09;时#xff0c;您希望在开始时显示一个状态“请稍候……”对话框#xff0c;并在响应到达时结束时关闭此… ajax异步监控 最近在JSF中处理新图表和图表“导出服务”时我遇到了一个非常普遍的问题。 当您执行长时间运行的任务操作时您希望在开始时显示一个状态“请稍候……”对话框并在响应到达时结束时关闭此对话框。 对于AJAX请求这不是问题但对于将一些二进制内容流式传输到浏览器的非AJAX请求而言则是有问题的。 要解决此问题我们可以使用与PrimeFaces中的FileDownload组件相同的技术。 我们可以设置一个特殊的cookie作为响应并在客户端定期检查此cookie如果已设置。 设置此Cookie后我们可以关闭打开的“之前”对话框。 可以在JSF中将cookie设置为 // set cookie to be able to ask it and close status dialog for example
FacesContext.getCurrentInstance().getExternalContext().addResponseCookie(cookie.chart.exporting, true, Collections.String, ObjectemptyMap()); Non AJAX按钮执行一个JavaScript函数例如monitorExporting它具有两个参数这些参数表示在请求/响应生命周期的开始和结束时要调用的另一个JavaScript函数。 p:commandButton valueExport to PNG ajaxfalse action#{combiChartController.exportToPng}onclickmonitorExporting(start, stop)/ PrimeFaces已经提供了一些方法来检查是否启用了cookie以获取和删除它们。 所以我们可以写 function monitorExporting(start, complete) {if(PrimeFaces.cookiesEnabled()) {if(start) {start();}window.chartExportingMonitor setInterval(function() {var exportingComplete PrimeFaces.getCookie(cookie.chart.exporting);if(exportingComplete true) {if(complete) {complete();}clearInterval(window.chartExportingMonitor);PrimeFaces.setCookie(cookie.chart.exporting, null);}}, 150);}
} 使用setInterval…定期询问cookie。 功能开始显示“请稍候……”对话框功能停止将其关闭。 script typetext/javascript
/* ![CDATA[ */function start() {statusDialog.show();}function stop() {statusDialog.hide();}
/* ]] */
/script 如果禁用了cookie则当然不会显示任何内容但是通常很少见。 参考 监视整个页面非AJAX要求从我们的JCG合作伙伴 Oleg Varaksin 收到 有关软件开发博客上的想法的 通知 。 翻译自: https://www.javacodegeeks.com/2013/07/monitor-full-page-non-ajax-requests-to-be-notified.htmlajax异步监控