I am generating a report from a JRBeanCollectionDataSource. This report is about a customer's order.
This is my code
public class Customer
{
private String customerName;
private String customerNo;
private String customerAddress;
private ArrayList<CustomerOrder> customerOrders;
//Getters and Setters
}
private class CustomerOrder
{
private String itemName;
private BigDecimal amount;
private int itemQuantity;
//Getters and Setters
}
When a customer a report containing the customer details and a list of the customer orders need to be generated.
Since JRBeanCollectionDataSource
takes a collection, this is what i did.
Customer cust; //Customer Instance
ArrayList<Customer> custList = new ArrayList<Customer>();
custList.add(cust);
JRBeanCollectionDataSource rptData = new JRBeanCollectionDataSource(custList);
How can i extract the CustomerOrder
list in Customer
and pass it as a subreport?
You should be able to set the datasource expression for the subreport:
new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{customerOrders})
The resulting xml should have a subreport tag that resembles:
<subreport>
<reportElement uuid="e9fc4a60-3844-41b7-a38c-768f06f09b44" x="0" y="57" width="555" height="68"/>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{customerOrders})]]></dataSourceExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "report2_subreport1.jasper"]]></subreportExpression>
</subreport>
The only other thing you need to check is that the Language
for the report properties is set to Java
.