ireport向子報表傳遞參數詳解

最近些日子一直在研究報表生成的模塊,用的是jasperreport,用ireport來設計報表模板,涉及到後臺像子報表傳遞參數。 java

後臺採用的是springmvc+spring+spring data jpa, spring

在後臺向子報表傳遞map參數時的步驟是: express

1.在Parameters添加一個同後臺傳遞到子報表map同名的parameter mvc

2.設置subMap的屬性 spa

3.設置子報表的屬性 設計

Parameters Map Expression屬性填寫$P{subMap}, code

(tips:此項只能用來向子報表傳遞普通的參數,好比string類型參數subparam) ip

Map<Object, Object> subMap = new HashMap<Object, Object>();

subMap.put("subparam", "subparam display");


Connection type屬性選擇Use a datasource expression 開發

(tips:此項向子報表傳遞數據集,即List類型等可迭代的集合類型參數) get

而後再Data Source Expression中填寫

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(((Map<String,List>)$P{subMap})
.get("persons1"))


個人後臺代碼是

Map<Object, Object> mainMap = new HashMap<Object, Object>();

List<Persons> persons1 = (new PersonsFactory()).getPersons();

subMap.put("persons1", persons1);

mainMap.put("subMap", subMap);


 

其中困擾了我好久的一點就是,按照高洪巖寫的《Jasperreports + ireport報表開發詳解》書中data source expression屬性填寫的格式爲

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{subMap}.get("persons1"))

如此填寫的後果實jasper文件編譯沒法經過,會報錯

說object類型沒有get()方法,並且Parameters參數類型中沒有map類型,

只能選擇父類型object,因此我把Object參數$P{subMap}強制轉換爲Map<String,List>,再去獲取其中的List,

((Map<String,List>)$P{subMap}).get("persons1")

編譯不報錯,成功編譯完成,

子報表map中List<Persons>也能夠正常傳遞顯示。

相關文章
相關標籤/搜索