Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 支持bean方法和';完成';Primefaces对话框的属性。_Java_Jsf_Primefaces_Jasper Reports - Fatal编程技术网

Java 支持bean方法和';完成';Primefaces对话框的属性。

Java 支持bean方法和';完成';Primefaces对话框的属性。,java,jsf,primefaces,jasper-reports,Java,Jsf,Primefaces,Jasper Reports,(首先,很抱歉我的英语不好) 我使用的是JSF2+PrimeFaces3.5+Spring3.2。 我在p:datatable组件中有一个订单列表 我想选择表中的一行(工作正常,这里没有问题),然后单击工具栏按钮:首先,使用JasperReports 4.8创建一个PDF文件(这里没有问题),然后在p:media中的p:dialog组件中显示PDF预览。 这是我的p:commandButton:(注意update和oncomplete属性) 一切正常,PDF文件已创建,对话框将显示,但有时我选择

(首先,很抱歉我的英语不好) 我使用的是JSF2+PrimeFaces3.5+Spring3.2。 我在
p:datatable
组件中有一个订单列表

我想选择表中的一行(工作正常,这里没有问题),然后单击工具栏按钮:首先,使用JasperReports 4.8创建一个PDF文件(这里没有问题),然后在
p:media
中的
p:dialog
组件中显示PDF预览。 这是我的p:commandButton:(注意
update
oncomplete
属性)

一切正常,PDF文件已创建,对话框将显示,但有时我选择一行,按下按钮,对话框将显示先前创建的PDF(先前选择的行),也就是说,对话框在创建新的PDF文件之前(即,
printPreview()
过程完成之前)加载PDF文件。 这是创建PDF文件的bean方法
printPreview()
:(也可以正常工作)

public void打印预览(){
试一试{
Map Map=newhashmap();
map.put(“ID”,orden.getId());
put(“LOCALE”,java.util.LOCALE.US);
DataSource ds=(DataSource)ApplicationContextProvider.getApplicationContext().getBean(“DataSource”,DataSource.class);
连接cn=ds.getConnection();
Resource rsc=ApplicationContextProvider.getApplicationContext().getResource(“classpath:reports/preview.jasper”);
字符串outFileName=FacesContext.getCurrentInstance().getExternalContext().getRealPath(“/”+“pdf\\preview.pdf”;
JasperPrint-JasperPrint=JasperFillManager.fillReport((jaspereport)JRLoader.loadObject(rsc.getInputStream()),map,cn);
jreporter=新的JRPdfExporter();
exporter.setParameter(JRExporterParameter.OUTPUT\u文件名,outFileName);
exporter.setParameter(jreporterParameter.JASPER_PRINT,jasperPrint);
JasperExportManager.exportreporttopffile(jasperPrint,outFileName);
}捕获(例外情况除外){
//处理异常
}
}

怎么了?对话框显示并加载上一个PDF后,我导航到创建PDF文件的路径,文件正常(我实际选择的顺序)。

也许您的浏览器正在积极缓存生成的PDF?尝试为每个预览生成一个唯一的名称(显然,您需要重新设计当前使用的
),可能问题在于浏览器缓存。我执行了你的建议,问题似乎消失了。
    <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 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>  
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
    }
}