2016-02-13 99 views
1

我是賈斯珀報告中的新人。 我成功地用碧玉報告顯示一張桌子。 但是如何通過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; 
    } 

} 

Person類

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

我認爲這是更好地使用子數據是這樣的: 在你的控制器:

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>