2017-10-13 78 views
0

我沒有使用PDF插件。我只是使用Jasper的Java API。一切工作正常。 PDF將在單獨的窗口中打開。我遇到的問題是,當沒有找到數據時,它仍會在瀏覽器中打開一個空白標籤。我想攔截這個,並顯示一條消息,而不是沒有數據,但沒有我試過的工作。使用Grails控制器生成PDF之前驗證數據是否存在

這裏是從控制器的代碼片段:

projAccomps = projAccomps.findAll { ProjectAccomplishment pa -> 
    pa.workDate >= startDate && pa.workDate <= endDate 
} 

// I'd like to be able to check right here for no data 
// and send back a message instead 
// 
// if (projAccomps.size() < 1) ... 

JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(projAccomps) 

String jasperFile = 
     grailsApplication.mainContext 
       .getResource('reports/accomplishment-listing.jasper') 
       .file 
       .getAbsoluteFile() 

// Report parameter 
Map<String, String> reportParam = new HashMap<String, String>() 

String projectQuery = "All projects" 
String dateRange = "" 
Boolean allProjects = true 
if (params.project) { 
    projectQuery = project.name 
    allProjects = false 
} 
if (params.startDate) { 
    dateRange = startDate.format('MM/dd/yyyy') 
} 
if (params.endDate) { 
    dateRange += " - " + endDate.format('MM/dd/yyyy') 
} 

String reportCriteria = "Work Order: ${wo.workOrderNumber}, Project(s): ${projectQuery}, Dates: ${dateRange}" 
reportParam['report_criteria'] = reportCriteria 
reportParam['all_projects'] = allProjects 

JasperPrint print = JasperFillManager.fillReport(jasperFile, reportParam, ds); 

byte[] bytes = JasperExportManager.exportReportToPdf(print) 

render(file: bytes, contentType: 'application/pdf') 

我試過Jquery.ajax和想抓PDF數據或功能成功的消息,但是這是一個災難。

任何人有任何想法如何做到這一點?

+0

以上是通過ajax調用的嗎? –

回答

1

在控制器的行動有幾種方法來創建響應,例如重定向或呈現出的情況下將其公開是有道理的使用重定向,然後返回

我認爲這應該工作

// ... get projAccomps data 

if (!projAccomps) { 
    flash.message "No result between $startDate and $endDate" 

    redirect uri: '/some/url' 
    return 
} 

// ... render pdf logic 

還有就是你可以使用製造商創建的PDF或Word文檔庫中,我分享鏈接,如果你想嘗試替代碧玉

https://github.com/craigburke/document-builder

+0

除了提交參數的表單具有導致立即打開新選項卡/窗口的target =「_ blank」這一事實之外,這確實起作用。這是一項要求。另外,我在這個頁面上有很多ajax,並且希望'空'的消息只出現在類似於flash.message的頁面上,但是不能以'成功'獲取PDF數據,功能,然後以某種方式渲染它使這很困難。 –

相關問題