jquery - Grails:使用称为Ajax的 Controller 生成Jasperreport

标签 jquery ajax grails jasper-reports

我有一个输入字段,在其中输入值millis参数,该值用作生成Jasperreport的参数。我正在使用Ajax调用生成报告的 Controller 。问题是,尽管报告似乎已成功生成,但从未显示下载对话框。

这是我的代码的一部分:

/*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生成任何报告/文件。我建议您在 View 中制作一个表单,并将其与必需的参数一起提交给同一 Controller 和操作。它将返回对话框,以保存您提到的报告。

码:

function imprimir(){
            $('<form>', {
                "id": "imprimir",
                "html": '<input type="text" id="millis" name="millis" value="' + $("#millis").val() + '" />',
                "action": '/Liquidaciones/liquidacionDeComplejo/crearReporteGrupal2'
            }).appendTo(document.body).submit();
        }

希望这可以帮助。
谢谢

关于jquery - Grails:使用称为Ajax的 Controller 生成Jasperreport,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27871436/

相关文章:

javascript - 如何使div中的按钮转到新的div

javascript - 使用 jQuery 进行几次 ajax 请求后,live()、delegate() 和 on() 停止工作

ajax - 设置 HttpContext.Current.User

grails - grails 索引页的最佳实践

javascript - 为 jquery 添加 Rails 输入名称时遇到问题

jquery - 如何在悬停时添加暂停(jquery)

javascript - 在 jQuery ajax 运行时加载 gif 图像

java - JSF GraphicImage onclick 问题

grails - 在 Grails 3 Rest-api 配置文件中显示 GSP

eclipse - 如何设置STS/Eclipse的源路径(使用Groovy grails)并使之固定?