2016-08-08 10 views
5

का मूल्य कैसे प्राप्त करें मेरे पास है .jrxml फ़ाइल और मैं कोड से कुछ पैरा पास करना चाहता हूं। मेरे पास Orde आर क्लास है जिसमें double price, int quantity और Product product जैसे फ़ील्ड हैं। स्थिति, सरल है जब मैं कीमत या मात्रा पारित करने के लिए की जरूरत है, मैं तो बस कुछ इस तरह करते हैं:जटिल जावाबीन

<textFieldExpression class = "java.lang.Integer"> 
    <![CDATA[$F{quantity}]]> 
</textFieldExpression> 

समस्या प्रकट होता है जब मैं product.getName() पारित करने के लिए प्रयास करें। मैं कुछ ऐसा करने की कोशिश की:

<textFieldExpression class = "java.lang.String"> 
    <![CDATA[$F{product}.getName()]]> 
</textFieldExpression> 

और कई अन्य लोगों, लेकिन मैं हो रही त्रुटि रखें: net.sf.jasperreports.engine.design.JRValidationException: Report design not valid : 1. Field not found : product

क्या आपको पता है कि कैसे इस समस्या को हल करने के लिए है?

+0

देखें: http://stackoverflow.com/a/38535589/59087 –

उत्तर

2

उदाहरण के लिए आप JavaBeans की एक जोड़ी (POJO) है:

public class Order { 

    private double price; 
    private int quantity; 
    private Product product; 
    // public getters 
} 

public class Product { 

    private String name; 
    // public getters 
} 

और आप इस तरह ढंग से रिपोर्ट के डेटा स्रोत की घोषणा: (हाँ, मुझे पसंद है अमरूद)

JRBeanCollectionDataSource datasource = new JRBeanCollectionDataSource(Lists.newArrayList(ImmutableList.<Order>builder() 
     .add(new Order(1000.2, 10, new Product("Phone"))) 
     .add(new Order(10200.0, 2, new Product("Tv"))) 
     .build())); 

इस क्षेत्र का उपयोग करने के मामले में घोषणा:

<field name="order" class="java.lang.Object"> 
    <fieldDescription><![CDATA[_THIS]]></fieldDescription> 
</field> 
<field name="price" class="java.lang.Double"/> 
<field name="quantity" class="java.lang.Integer"/> 
<field name="productName" class="java.lang.String"> 
    <fieldDescription><![CDATA[product.name]]></fieldDescription> 
</field> 

आप उपयोग कर सकते हैं इस तरह के भाव:

<textField> 
    <reportElement x="0" y="0" width="100" height="30"/> 
    <textFieldExpression><![CDATA[$F{price}]]></textFieldExpression> 
</textField> 
<textField> 
    <reportElement x="100" y="0" width="100" height="30"/> 
    <textFieldExpression><![CDATA[$F{quantity}]]></textFieldExpression> 
</textField> 
<textField> 
    <reportElement x="200" y="0" width="100" height="30"/> 
    <textFieldExpression><![CDATA[$F{productName}]]></textFieldExpression> 
</textField> 

नोट:

संबंधित मुद्दे