2017-10-13 70 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数据,功能,然后以某种方式渲染它使这很困难。 –

相关问题