Java 报表中的两个数据源

Java 报表中的两个数据源,java,jasper-reports,Java,Jasper Reports,我必须在jasperReports中做一个报告 我用这样的数据源填充我的初始报告 File mainJasper = new File( servletContext.getRealPath("/WEB-INF/prueba.jasper") ); Map<String,Object> parametros = new HashMap<String, Object>();

我必须在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(); 
File mainJasper=新文件(servletContext.getRealPath(“/WEB-INF/prueba.jasper”);
Map parametros=newhashmap();
参数put(“numLista”,numLista);
parametros.put(“txtDestino”,pas.getLista().getCiudadDestino());
parametros.put(“txtFecLlegada”,pas.getLista().getfeclelista().toString());
parametros.put(“txtProcedencia”,pas.getLista().getCiudadProcedencia());
parametros.put(“txtNombres”,con.getPersona().getNomPersona());
参数put(“txtFecNac”,con.getPersona().getFecNacPersona().toString());
parametros.put(“txtTipoDoc”,con.getPersona().getParameterica().getNomParameterica());
parametros.put(“txtnrobrevite”,con.getNumberRevConductor());
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(“txtnacialidad”,con.getPersona().getPais().getNomPais());
parametros.put(“txtEstCivil”,con.getPersona().getEstCivPersona());
JasperReport mainReporte=(JasperReport)JRLoader.loadObject(mainJasper);
JasperPrint mainPrint=JasperFillManager.fillReport(mainReporte,parametros,新的JRBeanCollectionDataSource(List1));
jreporter=新的JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,mainPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_文件,新的java.io.FILE(“new.pdf”);
出口商。出口报告();
该代码工作正常,但我有另一个列表,我想在我的报告中有两个细节

我的名单是
列表1实际起作用
列表2这是我的另一个列表

我怎样才能通过这个名单?另外,我在.jxrml中有一个子报告,但这两个列表的对象不同

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

parametros.put(“数据源2”,列表2)

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

net.sf.jasperreports.engine.data.JRBeanCollectionDataSource

您可以使用$p{dataSource2}作为子报表、表或列表的数据源

不确定我是否理解正确,或者这是另一件事,但如果您想将其作为子报表的数据源,请转到主报表上的子报表元素,添加以下行以进行设置:

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

...
...
如果这不是您想要的,并且您需要更具体的细节,请让我们知道您将使用第二个数据源的确切目的

示例-填充表格

1.声明子数据集(假设“code”和“caption”是列表2中对象的字段)


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


.....
可能重复
 <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>
<jr:table ...>
    <datasetRun subDataset="Table Dataset 1">
        <datasetParameter name="REPORT_DATA_SOURCE">
             <datasetParameterExpression><![CDATA[$P{dataSource2}]]></datasetParameterExpression>
        </datasetParameter>
    </datasetRun>
.....
</jr:table>