(首先,抱歉我的英语不好)
我正在使用JSF 2 + Primefaces 3.5 + Spring 3.2。
我在p:datatable
组件中有一个订单列表。
我想选择表格的一行(工作正常,这里没问题),然后点击一个工具栏按钮:首先,使用JasperReports 4.8创建一个PDF文件(这里没问题),然后显示PDF预览p:media
组件中的p:dialog
。
这是我的p:commandButton :(注意update
和oncomplete
属性)
<p:commandButton id="previewPDF" value="Preview PDF"
action="#{ordenBean.printPreview}" icon="ui-icon-print"
update="pdfDialog" oncomplete="PF('dlg_pdf').show();" />
这是一个简单的对话框:
<p:dialog id="pdfDialog" widgetVar="dlg_pdf" modal="true" draggable="false" header="PDF Preview" width="75%" position="center" height="600px">
<p:media player="pdf" value="/pdf/preview.pdf" width="100%" height="100%" />
</p:dialog>
显示加载对话框的p:ajaxstatus
组件。工作正常。
<p:ajaxStatus onstart="PF('statusDialog').show();" onsuccess="PF('statusDialog').hide();"/>
<p:dialog modal="true" widgetVar="statusDialog" header="Processing..." draggable="false" closable="false">
<p:graphicImage value="/images/loading.gif" />
</p:dialog>
一切正常,PDF文件已创建,对话框显示,但有时我选择一行,按下按钮,对话框显示以前创建的PDF(以前选中的行),即对话框在创建新文件之前(即在printPreview()
进程完成之前)加载PDF文件。
这是创建PDF文件的bean方法printPreview()
:(也可以正常工作)
public void printPreview() {
try {
Map<String, Object> map = new HashMap<String, Object>();
map.put("ID", orden.getId());
map.put("LOCALE", java.util.Locale.US);
DataSource ds = (DataSource) ApplicationContextProvider.getApplicationContext().getBean("dataSource", DataSource.class);
Connection cn = ds.getConnection();
Resource rsc = ApplicationContextProvider.getApplicationContext().getResource("classpath:reports/preview.jasper");
String outFileName = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/") + "pdf\\preview.pdf";
JasperPrint jasperPrint= JasperFillManager.fillReport((JasperReport) JRLoader.loadObject(rsc.getInputStream()), map, cn);
JRExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,outFileName);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
JasperExportManager.exportReportToPdfFile(jasperPrint, outFileName);
} catch (Exception ex) {
// handling exceptions
}
}
怎么了?对话框显示并加载以前的PDF后,我导航到创建PDF文件的路径,文件正常(我实际选择的订单)。