2010-04-21 30 views
7

Tôi muốn chuyển làm tham số cho tệp .jrxml của mình một đối tượng tùy ý trong miền của tôi, ví dụ: một Người.Làm cách nào để truyền một đối tượng tùy ý để báo cáo jasper làm tham số?

InputStream reportFile = MyPage.this.getClass().getResourceAsStream("test.jrxml"); 
HashMap<String, Person> parameters = new HashMap<String, Person>(); 
parameters.put("person", new Person("John", "Doe")); 
... 
JasperReport report = JasperCompileManager.compileReport(reportFile); 
JasperPrint print = JasperFillManager.fillReport(report, parameters, new JREmptyDataSource()); 
return JasperExportManager.exportReportToPdf(print); 

Và trên .jrxml làm điều gì đó như:

<?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="test" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> 
<property name="ireport.zoom" value="1.0"/> 
<property name="ireport.x" value="0"/> 
<property name="ireport.y" value="0"/> 
<parameter name="PERSON" isForPrompting="false" class="myApp.domain.person"/> 
<background> 
    <band splitType="Stretch"/> 
</background> 
<title> 
    <band height="20"> 
     <staticText> 
     <reportElement x="180" y="0" width="200" height="20"/> 
     <text><![CDATA[$P{PERSON.lastName}]]></text> 
     </staticText> 
    </band> 
</title> 
... 

là một cái gì đó như thể này? Tôi có thể tìm thấy các hướng dẫn phức tạp hơn cho thấy nhiều hơn là chỉ cần chuyển qua một java.lang.String?

Cảm ơn

Trả lời

7

Có, bạn có thể chuyển bất kỳ đối tượng Java nào, nhưng bạn nên đảm bảo nhập đối tượng đó trong JRXML.

Bên trong thẻ jasperReport. Bạn có thể sử dụng thẻ import, như:

<jasperReport...> 
     <import value="org.justfortest.Person"> 

Tuy nhiên, bạn có thể sử dụng JRBeanCollectionDataSource và cư báo cáo với một danh sách các đối tượng của bạn, mà không cần phải lưu trữ đối tượng tùy ý trong bản đồ params.

Kiểm tra hướng dẫn này để biết thêm về Jasper Reports Bean Collection Data Source

+1

Liên kết bị hỏng. –

0

Vâng, có thể chính xác cách bạn giải thích. Chỉ cần đảm bảo bạn có đúng classpath khi biên dịch jrxml và cẩn thận với trường hợp - chữ thường (person) hoặc chữ hoa (PERSON) ở mọi nơi.

+0

Cảm ơn, những gì nếu tôi không muốn thiết lập một classpath Đặc biệt, tôi có thể đặt trong một cái gì đó giống như .jrxml hoặc một cái gì đó như vậy cho báo cáo để có thể tìm thấy một lớp học cụ thể? Cảm ơn bạn một lần nữa vì đã giúp đỡ! –

+0

Tôi nghĩ bạn có thể sử dụng tính năng nhập. Hãy chắc chắn báo cáo xem nỗ lực của bạn có thành công hay không. – Bozho

+0

Câu hỏi rất phù hợp, bạn có thể giải quyết nó không? Đối mặt với chính xác yêu cầu tương tự, chúng tôi cần tải lên jrxml lên máy chủ jasper và rõ ràng là chúng tôi không muốn thêm bất kỳ thứ gì vào đường dẫn lớp trên máy chủ (không dễ dàng cập nhật), đồng thời chúng tôi không muốn sử dụng đơn vị báo cáo thay vì nhập các lớp vào jrxml trực tiếp. Bất kỳ đề xuất? – Aubergine

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