当前位置: 首页 > 知识库问答 >
问题:

通过Spring显示多个表jasper报告

沙海
2023-03-14

我是贾斯珀报告的新手。我成功地显示了一个带有碧玉报告的表格。但是如何通过Spring控制器在碧玉报告中显示多个表格?

我没有使用数据库作为数据源,只是在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;

}

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

共有1个答案

鲁俊友
2023-03-14

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

   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>
 类似资料:
  • 我的JSF2.0web应用程序旨在生成PDF报告。问题是在资源管理器窗口中没有显示PDF报告。我正在使用eclipse kepler,带有apache-tomcat-7.0.52,并且jasper Ireport的版本是4.8。 我将提供整个java类: 我可以在控制台看到消息,并且页面被刷新,但是没有PDF报告出现在explorer屏幕上 我已经用下面的代码替换了上面的PDF方法,但是徒劳的是,

  • 这是我的主报告, 我的子报表 我的bean工厂类,bean被填充,但主报表类字段显示,但子报表列表不显示,请帮助,我已经长出了几缕白发,试图解决这个问题

  • 我目前的技能只能通过使用JRBeanCollectionDataSource(list)作为数据源,在不使用子报表的情况下制作pdf。(数据打印成功) 谁能告诉我如何制作包含多个子报表的pdf报表,主jrxml文件和子报表jrxml文件中应该包含哪些内容,以及java代码中应该包含哪些内容?以及如何使用多个JRBeanCollectionDataSource(列表)?我唯一知道的是使用Map pa

  • 诸如此类。 我尝试使用iReport将“组页脚”频段中的最大化频段高度属性设置为true,但当我尝试查看时,会添加一些空页。

  • 我已将图像保存在oracle数据库中为BLOB。我的模型类包含Byte[]图像;对应于数据库中的BLOB feild。我必须将数据库中的所有图像导出为PDF格式。在java中,我使用了以下代码: 我需要PDF格式的图像。