Java 通过spring显示多表jasper报告

Java 通过spring显示多表jasper报告,java,spring,arraylist,controller,jasper-reports,Java,Spring,Arraylist,Controller,Jasper Reports,我是贾斯珀报告的新手。 我成功地用jasper报告显示了一个表。 但是如何通过Spring控制器在jasper报告中显示多个表呢 我没有使用数据库作为数据源,只是使用ArrayList中的普通POJO 这是我的Spring配置 @Configuration public class JasperReportConfig { @Bean public JasperReportsViewResolver getJasperReportsViewResolver() {

我是贾斯珀报告的新手。 我成功地用jasper报告显示了一个表。 但是如何通过Spring控制器在jasper报告中显示多个表呢

我没有使用数据库作为数据源,只是使用ArrayList中的普通POJO

这是我的Spring配置

@Configuration
public class JasperReportConfig {

    @Bean
    public JasperReportsViewResolver getJasperReportsViewResolver() {
      JasperReportsViewResolver resolver = new JasperReportsViewResolver();
      resolver.setPrefix("classpath:/reports/");
      resolver.setSuffix(".jrxml");
      resolver.setViewNames("report_*");
      resolver.setViewClass(JasperReportsMultiFormatView.class);
      resolver.setOrder(0);
      return resolver;
    } 

}
这是我的控制器

@Controller
public class MyReportController {

    @RequestMapping("/thereport")
    public ModelAndView showReport(ModelAndView mv) {


        // the first list to be the first table
        List<Person> theFirstList = new ArrayList<>();
        theFirstList.add(new Person("Joni", "Jakarta"));
        theFirstList.add(new Person("Michel", "Singapore"));
        mv.addObject("dataSource", theFirstList);

        // the second list to be the second table
        List<Person> theSecondList = new ArrayList<>();
        theSecondList.add(new Person("Annie", "Thailand"));
        theSecondList.add(new Person("Barry", "India"));
        mv.addObject("dataSource", theSecondList); 

        mv.addObject("format", "pdf");
        mv.setViewName("report_address");

        return mv;
    }

}

如何定义不同的数据源,以便在报告中使用两个(或更多)列表?或者我可以使用一个包含多个列表的数据源?

我认为最好使用这样的子数据集: 在控制器中:

   JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(distinctSymbolRespCounts);            
            parameterMap.put("DS1", beanColDataSource);
在jrxml中:

<parameter name="DS1" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"/>

定义表时,请使用此数据集:

  <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" whenNoDataType="Blank">
                            <datasetRun subDataset="datasourceTable" uuid="95223e22-f4cd-4749-9f65-6fa4b068a27b">
                                <datasetParameter name="REPORT_DATA_SOURCE">
                                    <datasetParameterExpression><![CDATA[$P{DS1}]]></datasetParameterExpression>
                                </datasetParameter>
                            </datasetRun>
...
</jr:table>

...
  <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" whenNoDataType="Blank">
                            <datasetRun subDataset="datasourceTable" uuid="95223e22-f4cd-4749-9f65-6fa4b068a27b">
                                <datasetParameter name="REPORT_DATA_SOURCE">
                                    <datasetParameterExpression><![CDATA[$P{DS1}]]></datasetParameterExpression>
                                </datasetParameter>
                            </datasetRun>
...
</jr:table>