【问题标题】:Showing multiple table jasper report via spring通过spring显示多表jasper报告
【发布时间】:2016-02-13 16:03:11
【问题描述】:

我是 Jasper 报告的新手。 我成功地展示了一张带有碧玉报告的表格。 但是如何通过 Spring Controller 在 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;
    }

}

人物类

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;

}

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

【问题讨论】:

    标签: java spring arraylist controller jasper-reports


    【解决方案1】:

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

       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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多