好吧,我基本上已经杀死了谷歌寻找解决方案。
使用richfaces 和JSF。
基本上我有 ah:commandButton,一旦单击它就会打印一个报告,但是如果你多次单击它,DownloadUtils.download() 方法就会被中断,然后它就会中断。我需要避免这种情况。
我试图禁用“onclick”。我尝试使用超时禁用 - 解决方案在这里找到:单击后禁用`<h:commandButton>`,但应触发操作
但是那些基本上要么根本不触发动作,要么在下载过程中到达某个点然后停止。它不返回任何内容,因此不会下载任何报告。
由于下载,您不能使用基于 ajax 的按钮/链接。
在此处确认 a4j 限制的链接: https ://community.jboss.org/thread/8598 使用 JSF 下载 CSV 文件
我还想过在单击按钮后尝试添加一个弹出面板而不使用这样的 ajax:http ://showcase.richfaces.org/richfaces/component-sample.jsf?demo=popup&skin=blueSky
但是在某些时候它不会继续下载(通常是在它在我的日志中打印 XML 之后)。
欢迎任何想法,此时任何解决方案都可以,甚至重定向到新页面。
按钮
<h:commandButton action="#{managingBean.download()}" value="#{bundle.download}"/>
管理 Bean
DownloadUtils.download(object.getOrderReference() + ".pdf",
service.getReport(ReportFormat.PDF, object.getOrder()));
服务
public InputStream getReport(ReportFormat format, Object object) throws IOException {
InputStream is = getReportResource("String", format);
Report report = someService.createReport(object);
Document doc = toXml(report, Report.class);
Map<String, Object> params = new HashMap<String, Object>();
params.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, doc);
params.put(JRXPathQueryExecuterFactory.XML_DATE_PATTERN, "yyyy-MM-dd'T'HH:mm:ss");
return getReportFromJasper(is, params, format, true, true, false);
}
先感谢您。