2016-05-04 57 views
0

我在我的java代碼中添加了JRBeanCollectionDataSource,並在我的mainreportsubreport中添加了參數。但是我無法在jrxml中打印參數。請告訴我如何使用jrxml中的參數。如何在jrxml中使用java.util.Collection參數?

Java代碼:

 List<InvoiceDTO> invoiceList = new ArrayList<InvoiceDTO>(); 
     invoiceList.add(invoice); 
     JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(invoiceList); 
     JasperPrint report = null; 
     parameters.put("invoiceList",invoiceList); 
     report = JasperFillManager.fillReport(stream, parameters, new JREmptyDataSource()); 

主要報告:

 <?xml version="1.0" encoding="UTF-8"?> 
    <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="ageing-esr-40-srpski" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" > 
<property name="com.jasperassistant.designer.GridHeight" value="12"/> 
<property name="com.jasperassistant.designer.GridWidth" value="12"/> 
<property name="com.jasperassistant.designer.SnapToGrid" value="false"/> 
<property name="com.jasperassistant.designer.Grid" value="false"/> 
<property name="ireport.zoom" value="1.0"/> 
<property name="ireport.x" value="0"/> 
<property name="ireport.y" value="110"/> 
<scriptlet name="esrgenerator" class="dk.comtalk.billing.server.util.ESRGenerator"/> 
<parameter name="printAmount" class="java.lang.String"/> 
<parameter name="invoiceId" class="java.lang.Integer"/> 
<parameter name="customerId" class="java.lang.String"/> 
<parameter name="entityName" class="java.lang.String"/> 
<parameter name="entityAddress" class="java.lang.String"/> 
<parameter name="entityCity" class="java.lang.String"/> 
<parameter name="entityProvince" class="java.lang.String"/> 
<parameter name="entityPostalCode" class="java.lang.String"/> 
<parameter name="customerName" class="java.lang.String"/> 
<parameter name="customerAddress" class="java.lang.String"/> 
<parameter name="customerCity" class="java.lang.String"/> 
<parameter name="customerProvince" class="java.lang.String"/> 
<parameter name="customerPostalCode" class="java.lang.String"/> 
<parameter name="entityLogo" class="java.io.File"/> 
<parameter name="countryCode" class="java.lang.String"/> 
<parameter name="balance" class="java.lang.String"/> 
<parameter name="carriedBalance" class="java.lang.String"/> 
<parameter name="invoiceDueDate" class="java.lang.String"/> 
<parameter name="totalWithTax" class="java.lang.String"/> 
<parameter name="newStatusId" class="java.lang.Integer"/> 
<parameter name="invoiceDate" class="java.lang.String"/> 
<parameter name="invoiceList" class="java.util.List"/> 
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false"> 
    <defaultValueExpression><![CDATA["D:\\Ravi Workspace\\Openbrm\\open-brm-openbrm-2.0\\resources\\designs\\"]]></defaultValueExpression> 
</parameter> 
<queryString> 
    <![CDATA[select count(*) from payment_invoice p where p.invoice_id=$P{invoiceId};]]> 
</queryString> 
<field name="payment_count" class="java.lang.Integer"/> 

<group name="invoice_total"> 
    <groupFooter> 
     <band/> 
    </groupFooter> 
</group> 
<title> 
    <band height="430"> 
     <image> 
      <reportElement x="8" y="0" width="185" height="48" /> 
      <imageExpression class="java.io.File"><![CDATA[$P{entityLogo}]]></imageExpression> 
     </image> 
     <textField> 
      <reportElement x="57" y="120" width="181" height="14" /> 
      <textFieldExpression><![CDATA[$P{customerName}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="57" y="148" width="294" height="14" /> 
      <textFieldExpression><![CDATA[$P{customerPostalCode}+ " " + $P{customerCity}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="57" y="162" width="211" height="14" /> 
      <textFieldExpression><![CDATA[$P{countryCode}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="57" y="134" width="181" height="14" /> 
      <textFieldExpression><![CDATA[$P{customerAddress}]]></textFieldExpression> 
     </textField> 
     <staticText> 
      <reportElement x="384" y="103" width="200" height="28" /> 
      <textElement> 
       <font size="11" isBold="true"/> 
      </textElement> 
      <text><![CDATA[1. opomena za neizmireni racun]]></text> 
     </staticText> 
     <staticText> 
      <reportElement x="405" y="173" width="179" height="14" /> 
      <text><![CDATA[Wangen b. Brüttisellen, 13.12.2015]]></text> 
     </staticText> 
     <staticText> 
      <reportElement x="36" y="201" width="328" height="19" /> 
      <text><![CDATA[Postovani gospodine/postovana gospodjo,]]></text> 
     </staticText> 
     <staticText> 
      <reportElement x="36" y="220" width="544" height="35" /> 
      <text><![CDATA[Dozvolite da Vas podsetimo da je, po podacima naseg knjigovodstva od danasnjeg dana, sledeci telefonski racun jos otvoren:]]></text> 
     </staticText> 
     <staticText> 
      <reportElement x="35" y="330" width="549" height="34" /> 
      <text><![CDATA[Ukoliko je Vasa uplata za ovde navedeni racun u medjuvremenu vec izvrsena, nemojte uzimati ovu opomenu u obzir. Ukoliko jos nije, molimo Vas da izvrsite uplatu izvrsite odmah.]]></text> 
     </staticText> 
     <staticText> 
      <reportElement x="35" y="360" width="557" height="69" /> 
      <text><![CDATA[Imajte u vidu da se kod opomena, uz regularni racun, placa administrativna taksa za obradu u visini od Fr. 20.00. Ev.deaktivacija servisa se, takodje, naplacuje, dodatnih Fr. 20.00. Molimo Vas stoga za postovanje nasih rokova uplate. 

     Najlepse hvala.]]></text> 
     </staticText> 
     <subreport> 
      <reportElement positionType="Float" x="36" y="257" width="559" height="73" isRemoveLineWhenBlank="true"/> 
      <subreportParameter name="invoiceDate"> 
       <subreportParameterExpression><![CDATA[$P{invoiceDate}]]></subreportParameterExpression> 
      </subreportParameter> 
      <subreportParameter name="customerId"> 
       <subreportParameterExpression><![CDATA[$P{customerId}]]></subreportParameterExpression> 
      </subreportParameter> 
      <subreportParameter name="printAmount"> 
       <subreportParameterExpression><![CDATA[$P{printAmount}]]></subreportParameterExpression> 
      </subreportParameter> 
      <subreportParameter name="invoiceId"> 
       <subreportParameterExpression><![CDATA[$P{invoiceId}]]></subreportParameterExpression> 
      </subreportParameter> 
      <subreportParameter name="invoiceDueDate"> 
       <subreportParameterExpression><![CDATA[$P{invoiceDueDate}]]></subreportParameterExpression> 
      </subreportParameter> 
      <subreportParameter name="invoiceList"> 
       <subreportParameterExpression><![CDATA[$P{invoiceList}]]></subreportParameterExpression> 
      </subreportParameter> 
      <subreportParameter name="newStatusId"> 
       <subreportParameterExpression><![CDATA[$P{newStatusId}]]></subreportParameterExpression> 
      </subreportParameter> 
      <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{invoiceList})]]></dataSourceExpression> 
      <subreportExpression class="java.lang.String"> <![CDATA[$P{SUBREPORT_DIR} + "ageing-esr-40-srpski-subreport1.jasper"]]> </subreportExpression> 
     </subreport> 
    </band> 
</title> 
<pageHeader> 
    <band height="117"> 
     <staticText> 
      <reportElement x="36" y="101" width="576" height="16" /> 
      <text><![CDATA[Symphonica AG | Hegnaustrasse 17 | 8602 Wangen b. Brüttisellen | Telefon 0840 988 988 | Fax 043 536 05 43]]></text> 
     </staticText> 
     <staticText> 
      <reportElement x="35" y="8" width="243" height="26" /> 
      <text><![CDATA[S postovanjem, 
      BALKATEL | Symphonica A.D.]]></text> 
     </staticText> 
    </band> 
</pageHeader> 
<summary> 
    <band height="294"> 
     <textField> 
      <reportElement x="5" y="56" width="123" height="14" /> 
      <textFieldExpression><![CDATA[$P{entityName}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="5" y="68" width="153" height="14" /> 
      <textFieldExpression><![CDATA[$P{entityAddress}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="5" y="81" width="226" height="14" /> 
      <textFieldExpression><![CDATA[$P{entityPostalCode}+ " " + $P{entityCity}]]></textFieldExpression> 
     </textField> 
     <staticText> 
      <reportElement x="5" y="26" width="100" height="15" /> 
      <text><![CDATA[6301 Zug]]></text> 
     </staticText> 
     <staticText> 
      <reportElement x="179" y="26" width="100" height="15" /> 
      <text><![CDATA[6301 Zug]]></text> 
     </staticText> 
     <textField> 
      <reportElement x="179" y="56" width="123" height="14" /> 
      <textFieldExpression><![CDATA[$P{entityName}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="179" y="68" width="149" height="14" /> 
      <textFieldExpression><![CDATA[$P{entityAddress}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="179" y="81" width="226" height="14" /> 
      <textFieldExpression><![CDATA[$P{entityPostalCode}+ " " + $P{entityCity}]]></textFieldExpression> 
     </textField> 
     <staticText> 
      <reportElement x="97" y="110" width="100" height="14" /> 
      <text><![CDATA[01-2653-5]]></text> 
     </staticText> 
     <staticText> 
      <reportElement x="272" y="110" width="100" height="16" /> 
      <text><![CDATA[01-2653-5]]></text> 
     </staticText> 
     <textField> 
      <reportElement x="169" y="236" width="640" height="30" /> 
      <textElement textAlignment="Left"> 
       <font fontName="SansSerif" size="13"/> 
      </textElement> 
      <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.generateCodeline($P{printAmount}.split("\\s+")[1],"01",">","971786","+","0126535",">",$P{invoiceId})]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="353" y="132" width="181" height="14" /> 
      <textFieldExpression><![CDATA[$P{customerName}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="353" y="144" width="181" height="14" /> 
      <textFieldExpression><![CDATA[$P{customerAddress}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="353" y="158" width="294" height="14" /> 
      <textFieldExpression><![CDATA[$P{customerPostalCode}+ " " + $P{customerCity}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="8" y="193" width="181" height="14" /> 
      <textFieldExpression><![CDATA[$P{customerName}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="8" y="205" width="181" height="14" /> 
      <textFieldExpression><![CDATA[$P{customerAddress}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="8" y="218" width="251" height="14" /> 
      <textFieldExpression><![CDATA[$P{customerPostalCode}+ " " + $P{customerCity}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="353" y="172" width="211" height="14" /> 
      <textFieldExpression><![CDATA[$P{countryCode}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="8" y="230" width="194" height="14" /> 
      <textFieldExpression><![CDATA[$P{countryCode}]]> </textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="353" y="92" width="424" height="19" /> 
      <textElement> 
       <font fontName="SansSerif" size="11" isBold="true"/> 
      </textElement> 
      <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.getReferenceNumber("971786",$P{invoiceId})]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="8" y="172" width="186" height="16" /> 
      <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.getReferenceNumber("971786",$P{invoiceId})]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="132" y="142" width="47" height="15" /> 
      <textElement> 
       <font fontName="SansSerif" size="11"/> 
      </textElement> 
      <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.splitAmount($P{printAmount}.split("\\s+")[1].split("\\.")[1])]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="301" y="142" width="40" height="15" /> 
      <textElement> 
       <font fontName="SansSerif" size="11"/> 
      </textElement> 
      <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.splitAmount($P{printAmount}.split("\\s+")[1].split("\\.")[1])]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="2" y="142" width="105" height="15" /> 
      <textElement textAlignment="Right"> 
       <font fontName="SansSerif" size="11"/> 
      </textElement> 
      <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.splitAmount($P{printAmount}.split("\\s+")[1].split("\\.")[0]).trim()]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="173" y="142" width="105" height="15" /> 
      <textElement textAlignment="Right"> 
       <font fontName="SansSerif" size="11"/> 
      </textElement> 
      <textFieldExpression> <![CDATA[$P{esrgenerator_SCRIPTLET}.splitAmount($P{printAmount}.split("\\s+")[1].split("\\.")[0]).trim()]]></textFieldExpression> 
     </textField> 
    </band> 
</summary> 
</jasperReport> 

在報表我已經分配了參數,但它不工作。

<textField> 
      <reportElement x="164" y="3" width="75" height="14" /> 
      <textFieldExpression><![CDATA[$P{invoiceList}]]> </textFieldExpression> 
     </textField> 
+0

它顯示一個錯誤,因爲我編譯jrxml文件時無法將集合轉換爲字符串。 – Hari

+0

請幫幫我,這對我很重要。 – Hari

回答

0

在主報告中使用該列表作爲字段變量。

<field name="yourList" class="java.util.ArrayList"> 
     <fieldDescription><![CDATA[]]></fieldDescription> 
</field> 

和數據源的表述應該是

<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{yourList}, false)]]></dataSourceExpression> 
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "ageing-esr-40-srpski-subreport1.jasper"]]></subreportExpression> 

從控制器結束時,你應該通過你的列表

JasperReport jasperMasterReport = (JasperReport) JRLoader.loadObjectFromFile(your_jasper_file_path);  
JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(dataList, false); 
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperMasterReport, parameters, beanColDataSource); 

假設你有InvoiceDTO類,並有一些成員

String name; 
String email; 

你可以從你的子報告通過簡單地訪問此

<field name="name" class="java.lang.String"/> 
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression> 

希望這會有所幫助。

+0

在我的情況下,我使用參數發送特定的值(例如說日期或報告標誌)。你瞭解我的代碼嗎? –

+0

是的但在invoiceDTO我需要通過整數值作爲invoiceids – Hari

+0

無論它是字符串還是整數。對於整數,你可以使用''//這裏maleCount包含一個int值。 –