gpt4 book ai didi

java - 报告中的两个数据源

转载 作者:行者123 更新时间:2023-12-01 13:20:37 28 4
gpt4 key购买 nike

我必须在 jasperReports 中制作报告
我用这样的数据源填充我的初始报告

File mainJasper = new File( servletContext.getRealPath("/WEB-INF/prueba.jasper") );                             

Map<String,Object> parametros = new HashMap<String, Object>();
parametros.put("numLista", numLista );
parametros.put("txtDestino", pas.getLista().getCiudadDestino());
parametros.put("txtFecLlegada", pas.getLista().getFecLleLista().toString());
parametros.put("txtProcedencia", pas.getLista().getCiudadProcedencia() );
parametros.put("txtNombres", con.getPersona().getNomPersona() );
parametros.put("txtFecNac", con.getPersona().getFecNacPersona().toString() );
parametros.put("txtTipoDoc", con.getPersona().getParametrica().getNomParametrica());
parametros.put("txtNroBrevete", con.getNumBrevConductor() );
parametros.put("txtOcupacion", con.getPersona().getProPersona() );
parametros.put("txtApellidos", con.getPersona().getApePatPersona() + " " +con.getPersona().getApeMatPersona() );
parametros.put("txtDomicilio", con.getPersona().getDirPersona() );
parametros.put("txtNumDoc", con.getPersona().getNumDoc() );
parametros.put("txtNacionalidad", con.getPersona().getPais().getNomPais() );
parametros.put("txtEstCivil", con.getPersona().getEstCivPersona() );


JasperReport mainReporte = (JasperReport) JRLoader.loadObject(mainJasper);
JasperPrint mainPrint = JasperFillManager.fillReport(mainReporte, parametros, new JRBeanCollectionDataSource(List1));

JRExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, mainPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new java.io.File("new.pdf"));
exporter.exportReport();

该代码工作正常,但我有另一个列表,我想在我的报告中包含两个详细信息

我的 list 是
List1 确实有效
List2 这是我的另一个列表
我怎样才能通过这个其他列表?我的 .jxrml 中还有一个子报告,但这两个列表是不同的对象

最佳答案

您可以将第二个作为参数发送。

parametros.put("dataSource2", List2 );

在报告中将参数类型设置为

net.sf.jasperreports.engine.data.JRBeanCollectionDataSource

您可以在表、列表中使用 $P{dataSource2} 作为子报表的数据源。

不确定我是否理解正确,或者这是另一回事,但如果您希望这是子报表的数据源,请转到主报表上的子报表元素,添加以下行来设置它:

<subreport>
...
<dataSourceExpression><![CDATA[$P{dataSource2}]]></dataSourceExpression>
...
</subreport>

如果这不是您想要的并且您需要更具体的详细信息,请告诉我们您将使用第二个数据源的具体用途。

示例 - 填充表格

1.声明一个子数据(假设“code”和“caption”是List2中对象的字段)

 <subDataset name="Table Dataset 1">
<queryString language="SQL">
<![CDATA[]]>
</queryString>
<field name="code" class="java.lang.String"/>
<field name="caption" class="java.lang.String"/>
</subDataset>

2.实际表 - 将子数据集设置为您声明的名称(“表数据集 1”),并将 REPORT_DATA_SOURCE 参数设置为包含 List2 的参数(“dataSource2”)

<jr:table ...>
<datasetRun subDataset="Table Dataset 1">
<datasetParameter name="REPORT_DATA_SOURCE">
<datasetParameterExpression><![CDATA[$P{dataSource2}]]></datasetParameterExpression>
</datasetParameter>
</datasetRun>
.....
</jr:table>

关于java - 报告中的两个数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22045124/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com