简体   繁体   English

通过Spring显示多个表的碧玉报告

[英]Showing multiple table jasper report via spring

I am new in Jasper report. 我是Jasper报告的新手。 I successfully displaying one table with jasper report. 我成功地用jasper报告显示了一个表。 But how to display multiple table in jasper report via Spring Controller? 但是如何通过Spring Controller在jasper报告中显示多个表呢?

I'm not using database as data source, just plain POJO in ArrayList. 我没有使用数据库作为数据源,只是在ArrayList中使用普通的POJO。

This is my Spring configuration 这是我的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;
    } 

}

And this is my Controller. 这是我的控制器。

@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;
    }

}

Person class 人类

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class Person {

    private String name;

    private String address;

}

How to define a different dataSource so that i can use two (or more) list in report? 如何定义一个不同的数据源,以便我可以在报表中使用两个(或多个)列表? Or maybe i can use one dataSource that contain multiple list in it? 或者,也许我可以使用一个包含多个列表的数据源?

I Think it is better to use subdataset like this: In your controller: 我认为最好使用这样的子数据集:在控制器中:

   JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(distinctSymbolRespCounts);            
            parameterMap.put("DS1", beanColDataSource);

In Your jrxml: 在您的jrxml中:

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

When Defining table use this dataset: 定义表时,请使用以下数据集:

  <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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM