2012-01-17 31 views
5

Tôi muốn tạo một báo cáo với một lớp tùy chỉnh như sau:Custom Class cho JasperReports lĩnh vực

public class Class1 { 
    String cl1_f1; 
    String cl1_f2; 
} 

public class Class2 { 
    String cl2_f1; 
    String cl2_f2; 
    Class1 cl1_ob1; 
} 

Bây giờ tôi vượt qua Class2 trong báo cáo thông qua các lĩnh vực và JRBeanCollectionDataSource.

<subDataset name="myitems"> 
    <field name="cl2_f1" class="java.lang.String"/> 
    <field name="cl2_f2" class="java.lang.String"/> 
    **<field name="cl1_ob1" class="Class2"/>** 
</subDataset> 

Đối với tham số thứ ba, tôi muốn đề cập đến một trong các trường của nó. Ví dụ: cl1_ob1.cl1_f1.

Tôi làm cách nào để thực hiện việc này?

Trả lời

10

Trong thiết kế báo cáo Jasper, lĩnh vực này sẽ được xác định như sau:

<field name="cl1_ob1" class="Class1"> 
    <fieldDescription><![CDATA[cl1_ob1]]></fieldDescription> 
</field> 

Và 2 biến của Class1 có thể được truy cập bằng cách gọi phương thức getter (nếu có) hoặc bạn có thể sử dụng biến trực tiếp, tùy thuộc vào đặc quyền truy cập của nó. Ví dụ, $ F {} cl1_ob1 .getCl1_f1() có thể được sử dụng như một biểu hiện văn bản lĩnh vực, như hình dưới đây:

<textField> 
    <reportElement x="36" y="26" width="235" height="20"/> 
    <textElement textAlignment="Center" verticalAlignment="Middle"/> 
    <textFieldExpression><![CDATA[$F{cl1_ob1}.getCl1_f1()]]></textFieldExpression> 
</textField> 
+0

Chúa ơi! Thats tuyệt vời !! Cảm ơn bạn. Nó hoạt động mà không có bất kỳ vấn đề! – venomrld

+1

@bchetty Tôi nhận được một java.lang.ClassNotFoundException: Sẽ không tải các lớp từ gói mặc định (Class1) –

+0

@JohnB cho java.lang.ClassNotFoundException cung cấp đầy đủ đường dẫn. Công việc của nó hoàn hảo cho me.thanks bchetty. –

Các vấn đề liên quan