Jsf 在预处理器阶段取消Primefaces数据表中的导出过程

Jsf 在预处理器阶段取消Primefaces数据表中的导出过程,jsf,primefaces,primefaces-datatable,Jsf,Primefaces,Primefaces Datatable,我有一个正在导出的简单数据表,我需要在预处理器阶段决定是否继续导出,这取决于当前是否有另一个导出正在运行(这是一个30000条记录表,两个并发导出只会杀死CPU)。有可能吗?我取得的最好成绩是在预处理器方法中抛出一个异常;这将破坏客户端的页面,但至少不会杀死服务器的CPU。必须在导出开始时做出决定,因为根据锁的状态,导出过程应该继续,或者只是抛出一条提示“稍后重试”的消息。 谢谢 为什么不创建/使用一个将异常转换为Faces消息的异常处理程序?例如,您可以使用PrimeFaces Monitor

我有一个正在导出的简单数据表,我需要在预处理器阶段决定是否继续导出,这取决于当前是否有另一个导出正在运行(这是一个30000条记录表,两个并发导出只会杀死CPU)。有可能吗?我取得的最好成绩是在预处理器方法中抛出一个异常;这将破坏客户端的页面,但至少不会杀死服务器的CPU。必须在导出开始时做出决定,因为根据锁的状态,导出过程应该继续,或者只是抛出一条提示“稍后重试”的消息。
谢谢

为什么不创建/使用一个将异常转换为Faces消息的异常处理程序?例如,您可以使用PrimeFaces MonitorDownload(),并在执行一个导出过程时显示一个带有modal的ajaxStatus对话框(这样,在下载完成之前,用户将无法再次单击屏幕上的任何内容,包括expot按钮),或者您可以取消单击export按钮并启用它;)另外,您正在进行什么类型的导出CSV、XLSX、PDF?我想知道是什么在扼杀CPU,因为如果是XLSX,CSV会很快。你尝试过XLSXSTREAM吗?我尝试过MonitorDownload和ajaxExceptionHandler都没有成功,但我想我做错了什么。既然您验证了这些选项,我将更加努力地尝试使其工作。@我不是说机器人是的,您需要定义一个启动和停止函数(javascript),例如,在启动函数中,您可以调用dialog.show();在stop函数中,只需调用dialog.hide();这就是我在项目中使用它的方式:onclick=“PrimeFaces.monitorDownload(startDialog,stopDialog);”顺便说一句,我有PrimeFaces 7.0