如何将ArrayList传递给JasperReports? [英] How to pass ArrayList to JasperReports?

查看:142
本文介绍了如何将ArrayList传递给JasperReports?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 JasperReports 的新手。我想将 ArrayList 传递给子报告的子报告。

I'm new to JasperReports. I want to pass ArrayList to subreport of subreport.

我有一个主报告,其中包含一个subreport1和这个subreport1封装一个

subreport2里面。

I have master report which contains one subreport1 and this subreport1 encapsulate one
subreport2 inside.

现在如何将arrayList传递给subreport2?

Now how to pass arrayList to subreport2?

MasterReport - >子报告 - > SubReport

注意 :我正在使用 iReport 创建jasper模板并从我的DAO java类将datalist传递给jasper。

Note: I am using iReport to create jasper template and passing datalist to jasper from my DAO java class.

下面是我的Form bean类

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;
    }
} // and so on for other variables..

我的DAO java类低于

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);
            } // end rsCollat
        } // end if
        CusipData cusipData1 = new CusipData();
        List CusipList = new ArrayList<Object>();

        for (int io = 0; io < listCusip.size(); io++) {
            cusipData1 = (CusipData) listCusip.get(io);
            NewtripDealerLoan = cusipData1.getTripDealerLoan();
            tripID = cusipData1.getTripID();
            dealerID = cusipData1.getDealerID();
            loanNo = cusipData1.getLoanNo();

            if (NewtripDealerLoan.equalsIgnoreCase(OldtripDealerLoan) || OldtripDealerLoan.equalsIgnoreCase("")) {
                CusipList.add(cusipData1);

            }
            if (!NewtripDealerLoan.equalsIgnoreCase(OldtripDealerLoan)) {
                reportData = new CollatReportData();
                reportData.setTripID(tripID);
                reportData.setTripDealerLoan(NewtripDealerLoan);
                reportData.setListCusipData(CusipList);
                //and so on
                //........
                CollatList.add(reportData);

                CusipList = null;
            }
            OldtripDealerLoan = NewtripDealerLoan;
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println("Inside LoanDetailDAO:strTripQuery:Exception" + sqlQueryTrip + e);
    }

    return CollatList;
}

上述DAO类返回List并传递此 Arraylist 通过Hashmap Param到Jasper模板。

the above DAO class returns List and passing this Arraylist to Jasper template through Hashmap Param.

下面是我的示例Master jasper模板,从这里我将ArrayList传递给subReport,如

Below is my sample Master jasper template, from here i am passing ArrayList to subReport like

     <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>

其中 $ p {list} 的ArrayList 。并在运行代码时使用此列表在subReport1 asusual

where $p{list} is ArrayList. and use this list to print in subReport1 asusual

中打印,我收到以下错误:

while running the code, i am getting the below error:

从bean检索字段值时出错:tripID

感谢您的帮助。

推荐答案

通过传递集合数据来完成: new BeanCollectionDataSource(yourArrayList);

It's done by passing a collection data-source: new BeanCollectionDataSource(yourArrayList);

然后获取 JasperPrint 对象:

JasperPrint jasperPrint = 
      JasperFillManager.fillReport(jasperReport, params, dataSource);

要传递到子报告,您有两种选择:

To pass to a subreport, you have two options:


  • 如果它是每行子报告,只需将数组作为bean的属性。即列表< Something> 其中 Something 的属性类型为 List< AnotherThing>

  • 如果是整个报告的一个,请将其作为参数传递( params 以上)。

  • If it is a subreport-per-row, simply have the array as a property of the bean. I.e. List<Something> where Something has a property of type List<AnotherThing>
  • If it is one for the whole report, pass it as a parameter (params above).

这篇关于如何将ArrayList传递给JasperReports?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆