2010-09-02 10 views
6

Ich bin neu in JasperReports. Ich möchte ArrayList zum Unterbericht des Unterberichts übergeben.Wie übergeben Sie ArrayList an JasperReports?

Ich habe Master-Bericht, der eine subreport1 enthält und diese subreport1 ein
subreport2 innen kapseln.

Jetzt, wie ArrayList an Unterbericht2 übergeben?

Wie MasterReport -> SubReport -> SubReport

Hinweis: Ich bin mit iReport Jaspis-Vorlage und vorbei Datenliste zu erstellen, die von meiner DAO Java-Klasse nach Jasper.

Unten ist mein Formular-Bean-Klasse

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

Meine DAO Java-Klasse ist unter

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

die oben DAO-Klasse gibt Liste und Weitergabe dieses Arraylist zu Jasper Vorlage durch HashMap Param.

Unten ist mein Probe Meister Jaspis-Vorlage, von hier i Arraylist ist vorbei wie an subreport

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

wo $p{list}ArrayList ist. und anhand dieser Liste in subReport1 asusual

zu drucken, während der Code ausgeführt wird, erhalte ich die folgenden Fehler:

Error retrieving field value from bean : tripID

Vielen Dank für Ihre Hilfe im Voraus.

+0

Übrigens sollten Sie wirklich mehr über Java Generics lesen - Sie verwenden sie nicht richtig. – Bozho

+0

hat das Problem gelöst? Ich bin frustriert, da ich das ähnliche Problem habe. Das Array-Listenobjekt hat ein anderes Array-Listenobjekt und ein anderes Array-Listenobjekt. Ich habe 3 Ebenen. –

Antwort

9

Es erfolgt durch eine Sammlung Datenquelle vorbei: new BeanCollectionDataSource(yourArrayList);

Und dann das JasperPrint Objekt zu erhalten:

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

zu einem subreport zu übergeben, haben Sie zwei Möglichkeiten:

  • Wenn es sich um einen Unterbericht pro Zeile handelt, müssen Sie das Array einfach als Eigenschaft der Bean angeben. I.e. List<Something> wobei Something eine Eigenschaft des Typs List<AnotherThing>
  • hat Wenn es eine für den gesamten Bericht ist, übergeben Sie es als Parameter (params oben).
+0

Ja, ich weiß es. aber wie man es passiert. Können Sie mir kurz einen Beispielcode zur Verfügung stellen? Ich bin in der Lage, ArrayList an den ersten Unterbericht übergeben, aber nicht in der Lage sein, von Unterbericht1 (Master-Sureport1-Subreport2) nach Überleitung2 übergeben. Unterbericht2 ist innerhalb Unterbericht1 – Manu

+0

gut, zeigen Sie zuerst Code - wie erhalten Sie Ihren Bericht in Java-Code. – Bozho

+0

@Bozho .. meine Codierung ist riesig, also konnte ich es hier nicht posten. Entschuldigung dafür. könnten Sie bitte einen Beispielcode posten, der verwendet wird, um Arraylist an den Unterbericht des Unterberichts zu übergeben. – Manu

5

Schritt: 1 definieren ein Feld wie
Feld name = "listCusipData" und class = "java.util.ArrayList"

Schritt: 2 Verwendung dieser Ausdruck in Ihrem Unter Bericht dataSourceExpression
neue net.sf .jasperreports.engine.data.JRBeanCollectionDataSource ($ F {listCusipData}, false)

Verwandte Themen