Grails和Jasper - 将创建视图中的输入字段值作为参数发送到报表

时间:2013-12-23 23:54:57

标签: javascript jquery grails jasper-reports gsp

我在尝试将输入字段值发送到Jasper报告时遇到问题。我知道如何将参数发送到报表但我总是使用show.gsp视图执行此操作,因为执行此类操作非常简单:

<g:jasperReport controller="liquidacionDeEstano" action="crearReporte" jasper="liquidacion_estano" format="PDF" name="ReporteLiquidacion${liquidacionDeEstanoInstance.lote}">
<input type="hidden" name="LIQ_SN_ID" value="${liquidacionDeEstanoInstance.id}" />
</g:jasperReport>

其中LIQ_SN_ID是报告使用的“静态”参数。

但是现在我想填充一些输入字段并将此值用作参数。所以,我正在做的是使用jasperReport标记中的一些输入字段和jasperReport标记内的隐藏字段。然后我使用JavaScript将输入字段中的值复制到隐藏字段。

要生成报告,我只使用SQL,传递的参数用于过滤。

这是我的控制器关闭来创建报告(我想除参数外我不需要任何其他内容):

def crearReporte = {
chain(controller:'jasper',action:'index',params:params)
}

这是GSP表单中用于调用报告的代码:

<g:jasperReport controller="reporteLotesRecepcionados" action="crearReporte" jasper="reporte_recepcion_fechas" format="PDF" name="ReportePorFechas">
    <input type="hidden" id="ELEMENTO_1" name="ELEMENTO_1" />
    <input type="hidden" id="ELEMENTO_CLASS_1" name="ELEMENTO_CLASS_1" />
    <input type="hidden" id="FECHA_INICIAL_1" name="FECHA_INICIAL_1"/>
    <input type="hidden" id="FECHA_FINAL_1" name="FECHA_FINAL_1"/>
    <input type="hidden" id="ESTADO_LOTE_1" name="ESTADO_LOTE_1"/>
</g:jasperReport>

我使用Firebug和Firefox的Web Developer扩展程序检查了所有参数是否正确(隐藏字段值)但是当我点击报告的链接时会产生以下错误:

Timestamp: 23/12/2013 07:20:00 p.m.
Error: TypeError: link.parentNode._format is undefined
Source File: http://localhost:8080/Liquidaciones/reporteLotesRecepcionados/create
Line: 660

在链接到错误后,将显示以下自动生成的代码:

<script type="text/javascript">
    function submit_reporterecepcionfechas(link) {
      link.parentNode._format.value = link.title;
      link.parentNode.submit();
      return false;
    }
  </script>

我不知道我做错了什么。事实上,这是我第一次尝试使用值作为输入字段中的参数生成报告。

请帮助我。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

我知道这已经在这里待了11个月而没有得到答案...... Jasper标签使用自己的形式,因为html禁止嵌套表单:

  

内容模型:流内容,但没有表单元素后代。   (HTML

Jasper文档说:“请注意,jasperReport标记不应与表单元素嵌套,因为它在其实现中使用表单元素,并且不允许嵌套表单。”

答案 1 :(得分:0)

最后我解决了,但我不确定我是怎么做到的。好的,这就是我做的:

如您所知,自Grails 2(我认为)后,form.gspcreate.gsp视图使用了edit.gsp。我只使用create.gsp(以及因此,form.gsp)视图来获取输入字段以获取生成报告的参数。最初我找到了代码:

<g:jasperReport controller="reporteLotesRecepcionados" action="crearReporte" jasper="reporte_recepcion_fechas" format="PDF" name="ReportePorFechas">
    <input type="hidden" id="ELEMENTO_1" name="ELEMENTO_1" />
    <input type="hidden" id="ELEMENTO_CLASS_1" name="ELEMENTO_CLASS_1" />
    <input type="hidden" id="FECHA_INICIAL_1" name="FECHA_INICIAL_1"/>
    <input type="hidden" id="FECHA_FINAL_1" name="FECHA_FINAL_1"/>
    <input type="hidden" id="ESTADO_LOTE_1" name="ESTADO_LOTE_1"/>
</g:jasperReport>

隐藏<g:form></g:form>代码。因此,作为实验,我尝试复制代码以声明输入字段和代码以生成从form.gsp文件到create.gsp的报告,在<g:form></g:form>标记外面(I'我不再使用form.gsp文件了。这就是全部。它现在工作得很好。

正如我告诉过你的,我不知道这个问题是如何解决的。也许必须将标签置于任何<g:form></g:form>标签之外......

......但为什么?

PD:我创建了一个域类,让表单输入将作为参数的值。你们所有人都必须认为这完全是不必要的,并且拥有一个普通的HTML表单就足够了,好吧,我是Grails的新手,对不起。