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



我在尝试将输入字段值发送到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标记外的一些输入字段和jasperReports标记内的隐藏字段。然后,我使用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>

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

请帮我做这个。

提前谢谢。

我知道这已经在这里11个月了,没有答案,所以。。。Jasper标签使用自己的表单,由于html禁止嵌套表单:

内容模型:流动内容,但没有表单元素子体。(HTML)

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

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

正如您所知,由于Grails 2(我认为),create.gspedit.gsp视图使用了一个form.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>标记(我不再使用form.gsp文件)。仅此而已。它现在运行得很好。

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

但为什么呢?

PD:我创建了一个域类,以使表单能够输入将要作为参数的值。你们一定都认为这是完全没有必要的,拥有一个普通的HTML表单就足够了,对不起,我是Grails的新手。

最新更新