Grails:使用 Ajax-called 控制器生成 Jasperreport
Grails: Generate a Jasperreport with a Ajax-called controller
我有一个输入字段,我在其中输入一个值,即 millis
参数,用作生成 Jasperreport 的参数。我使用 Ajax 调用生成报告的控制器。问题是,虽然报告似乎已成功生成,但从未显示下载对话框。
这是我的部分代码:
/*THE BUTTON USED FOR MY GSP VIEW*/
<button id="imprimir" type="button">IMPRIMIR LOTES LIQUIDADOS</button>
/*JAVASCRIPT CODE TO CALL THE CONTROLLER*/
$("#imprimir").bind("click",imprimir);
function imprimir(){
$.ajax({
url: "/Liquidaciones/liquidacionDeComplejo/crearReporteGrupal2",
dataType: 'json',
data: {
millis:$("#millis").val()
},
success: function(data) {
},
error: function(request, status, error) {
}
});
}
/*GRAILS CONTROLLER THAT GENERATES DE REPORT*/
def crearReporteGrupal2 = {
Map reportParams = [:]
def millis = params.millis.toBigDecimal()
def realPath = servletContext.getRealPath("/reports/images/")
reportParams.put("millis",millis)
reportParams.put("realPath",realPath+"/")
reportParams.put("SUBREPORT_DIR","${servletContext.getRealPath('/reports')}/")
def reportDef = new JasperReportDef(name:'liquidacion_grupal_complejo.jasper',fileFormat:JasperExportFormat.PDF_FORMAT,parameters: reportParams)
byte[] bytes
bytes = jasperService.generateReport(reportDef).toByteArray()
response.addHeader("Content-Disposition", 'attachment; filename="liquidacion_grupal.pdf"')
response.contentType = 'application/pdf'
response.outputStream << bytes
response.outputStream.flush()
//I read somewhere that is necessary to return 'something' to initiate the download
//but it didn't help
//return null
//render [:] as JSON
}
这里是服务器的结果:
但是当我从 Web 控制台复制此 URL:/Liquidaciones/liquidacionDeComplejo/crearReporteGrupal2?millis=1420757752558
并将其粘贴到新选项卡时,会出现下载对话框。
请帮帮我!
提前致谢。
您无法从 ajax 生成任何 reports/files。我会建议你在你的视图中制作一个表单,并将它与所需的参数一起提交给同一个控制器和动作。它将 return 对话框用于保存您提到的报告。
代码:
function imprimir(){
$('<form>', {
"id": "imprimir",
"html": '<input type="text" id="millis" name="millis" value="' + $("#millis").val() + '" />',
"action": '/Liquidaciones/liquidacionDeComplejo/crearReporteGrupal2'
}).appendTo(document.body).submit();
}
希望这对您有所帮助。
谢谢
我有一个输入字段,我在其中输入一个值,即 millis
参数,用作生成 Jasperreport 的参数。我使用 Ajax 调用生成报告的控制器。问题是,虽然报告似乎已成功生成,但从未显示下载对话框。
这是我的部分代码:
/*THE BUTTON USED FOR MY GSP VIEW*/
<button id="imprimir" type="button">IMPRIMIR LOTES LIQUIDADOS</button>
/*JAVASCRIPT CODE TO CALL THE CONTROLLER*/
$("#imprimir").bind("click",imprimir);
function imprimir(){
$.ajax({
url: "/Liquidaciones/liquidacionDeComplejo/crearReporteGrupal2",
dataType: 'json',
data: {
millis:$("#millis").val()
},
success: function(data) {
},
error: function(request, status, error) {
}
});
}
/*GRAILS CONTROLLER THAT GENERATES DE REPORT*/
def crearReporteGrupal2 = {
Map reportParams = [:]
def millis = params.millis.toBigDecimal()
def realPath = servletContext.getRealPath("/reports/images/")
reportParams.put("millis",millis)
reportParams.put("realPath",realPath+"/")
reportParams.put("SUBREPORT_DIR","${servletContext.getRealPath('/reports')}/")
def reportDef = new JasperReportDef(name:'liquidacion_grupal_complejo.jasper',fileFormat:JasperExportFormat.PDF_FORMAT,parameters: reportParams)
byte[] bytes
bytes = jasperService.generateReport(reportDef).toByteArray()
response.addHeader("Content-Disposition", 'attachment; filename="liquidacion_grupal.pdf"')
response.contentType = 'application/pdf'
response.outputStream << bytes
response.outputStream.flush()
//I read somewhere that is necessary to return 'something' to initiate the download
//but it didn't help
//return null
//render [:] as JSON
}
这里是服务器的结果:
但是当我从 Web 控制台复制此 URL:/Liquidaciones/liquidacionDeComplejo/crearReporteGrupal2?millis=1420757752558
并将其粘贴到新选项卡时,会出现下载对话框。
请帮帮我!
提前致谢。
您无法从 ajax 生成任何 reports/files。我会建议你在你的视图中制作一个表单,并将它与所需的参数一起提交给同一个控制器和动作。它将 return 对话框用于保存您提到的报告。
代码:
function imprimir(){
$('<form>', {
"id": "imprimir",
"html": '<input type="text" id="millis" name="millis" value="' + $("#millis").val() + '" />',
"action": '/Liquidaciones/liquidacionDeComplejo/crearReporteGrupal2'
}).appendTo(document.body).submit();
}
希望这对您有所帮助。 谢谢