I am new to JasperReports . I want to pass an ArrayList to a subreport.
I have a main report that contains one subreport1, and this subreport1 encapsulates one
subreport2 inside.
Now how to pass arrayList to subreport2?
Like MasterReport -> SubReport -> SubReport
Note I am using iReport to create a jasper template and pass the datalist to jasper from my Java DAO class.
Below is my form bean Class
public class CollatReportData extends BaseItem { private List<CusipData> listCusipData = null; private String dealerID = null; private String tripID = null; private String loanNo = null; private String dealerName = null; private String tripDealerLoan = null; public CollatReportData() { super(); } public List<CusipData> getListCusipData() { return listCusipData; } public void setListCusipData(List<CusipData> listCusipData) { this.listCusipData = listCusipData; } public String getDealerID() { return dealerID; } public void setDealerID(String dealerID) { this.dealerID = dealerID; } public String getTripID() { return tripID; } public void setTripID(String tripID) { this.tripID = tripID; } }
My DAO java class is below
public List<Object> getCollatData(String custName, String ctripid, String dealerid, String userID) { final Connection conn = super.getCurrentConnection(); String sqlQueryTrip = null; ResultSet rsCollat = null; String tripID = null; String dealerID = null; String cusSysID = null; String loanNo = null; String txnNo = null; String cusipNo = null; String cusipStatus = null; String parVal = null; String tripDealerLoan = null; String OldtripDealerLoan = ""; String NewtripDealerLoan = ""; CollatReportData reportData = null; CusipData cusipData = null; List listCusip = new ArrayList<Object>(); List CollatList = new ArrayList<Object>(); try { PreparedStatement pstmtTrip; sqlQueryTrip = "SELECT iscl_sys_id, iscl_trip_id, iscl_trip_dealer_id, " + "iscl_cus_sys_id, iscl_bankref_cd, iscl_bdas_db_cd, " + "iscl_loan_no, iscl_txn_no, iscl_cusip_no, iscl_status_cd, " + "iscl_sec_de_tx, iscl_par_val_am, iscl_market_val_am, " + "scl_pri_source_cd, iscl_colla_mar_val_am, iscl_mature_dt, " + "iscl_sec_ty, iscl_sec_rt, iscl_sec_price_am, iscl_sec_factor, " + "iscl_sec_margin, iscl_sec_accrued_am " + "FROM BDS_DBA.INVCONF_SHELL_COLLAT " + "WHERE iscl_cus_sys_id='" + custName + "'"; pstmtTrip = conn.prepareStatement(sqlQueryTrip); rsCollat = pstmtTrip.executeQuery(); if (rsCollat != null) { while (rsCollat.next()) { tripID = rsCollat.getString("iscl_trip_id"); dealerID = rsCollat.getString("iscl_trip_dealer_id"); loanNo = rsCollat.getString("iscl_loan_no"); tripDealerLoan = tripID + dealerID + loanNo; cusipData = new CusipData(); cusipData.setTripID(tripID); cusipData.setCusipNo(cusipNo); cusipData.setTripDealerLoan(tripDealerLoan); listCusip.add(cusipData); }
the above DAO class returns List and passes this ArrayList template to Jasper via Hashmap Param.
Below is a sample wizard template template, from here I pass an ArrayList to subReport, for example
<parameter name="list" isForPrompting="false" class="java.util.List"/> <detail> <band height="100" isSplitAllowed="true" > <subreport isUsingCache="true"> <reportElement x="30" y="20" width="170" height="40" key="subreport-1"/> <dataSourceExpression><![CDATA[new JRBeanCollectionDataSource( $P{list})]]></dataSourceExpression> <subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "Collateral_SubReport1.jasper"]]></subreportExpression> </subreport> </band> </detail>
where $p{list} is an ArrayList . and use this list to print in subReport1 asusual
while running the code, I get the following error:
Error retrieving field value from bean : tripID
Thanks for your help in advance.