2013-09-06 24 views
5

Nó khiến tôi phát điên .. Giờ trước tôi đang cố gắng tìm ra lý do tại sao báo cáo của tôi ngừng hoạt động ngay sau khi tôi thêm một subreport vào nó .. Tôi đã kiểm tra và thử tất cả các sự cố tương tự here , herehere. Nếu không thành công .. Subreport là trong cùng thư mục cho chắc chắn .. Định nghĩa trông giống như:JasperReports: Không thể định vị subreport

<subreport isUsingCache="false"> 
       <reportElement uuid="db816b3c-a13d-440f-a6a2-f899762e61e4" x="0" y="89" width="555" height="100"/> 
       <subreportParameter name="footerAddress"> 
        <subreportParameterExpression><![CDATA[$P{footerAddress}]]></subreportParameterExpression> 
       </subreportParameter> 
       <subreportParameter name="footerManager"> 
        <subreportParameterExpression><![CDATA[$P{footerManager}]]></subreportParameterExpression> 
       </subreportParameter> 
       <subreportParameter name="footerContact"> 
        <subreportParameterExpression><![CDATA[$P{footerContact}]]></subreportParameterExpression> 
       </subreportParameter> 
       <subreportParameter name="footerBank"> 
        <subreportParameterExpression><![CDATA[$P{footerBank}]]></subreportParameterExpression> 
       </subreportParameter> 
       <subreportExpression class="net.sf.jasperreports.engine.JasperReport"><![CDATA[$P{SUBREPORT_DIR}]]></subreportExpression> 
      </subreport> 

đâu $ P {SUBREPORT_DIR} là "/valid/path/sub.report.jasper"

Và tôi vẫn nhận được một lỗi: Resource not found at /valid/path/sub.report.jasper

TẠI SAO ??

+0

Có thể là sự cố về quyền trên hệ điều hành * nix không? –

+0

@AlexK Tôi không nghĩ vậy .. Tôi có thể truy cập hình ảnh trong cùng một thư mục hoặc nội bộ từ cùng một báo cáo .. – nKognito

+0

'sub.report.jasper' - Có phải tên tệp, không phải là thư mục không? –

Trả lời

5

Trong tác giả thông điệp đầu tiên nói:
đâu $ P {} SUBREPORT_DIR là "/valid/path/sub.report.jasper"

$ P {SUBREPORT_DIR} là một thư mục , nhưng không phải tên tệp. Đây là lỗi đầu tiên.

Thứ hai: đôi khi jasper không thể tìm thấy subreport, thậm chí đường dẫn là chính xác.

Cách để giải quyết vấn đề này:

  1. đèo $ P {SUBREPORT_DIR} vào báo cáo chính (Trong trường hợp này: "/ giá trị/path /"), đặt tham số này thành HashMap - cách tiêu chuẩn vượt qua các thông số vào jasper
  2. đèo $ P {SUBREPORT_DIR} từ chính báo cáo vào subreport như tham số: $ P {SUBREPORT_DIR} báo cáo chính -> $ P {SUBREPORT_DIR} của subreport (cách này được sử dụng khi tồn tại subsubreport, mà gọi từ subreport)
  3. Trong báo cáo chính thiết lập biểu thức để subreport như $ P {SUBREPORT_DIR} + "sub.report.jasper"

Chúc may mắn

+0

'$ P {SUBREPORT_DIR} là một thư mục, nhưng không phải là tên tệp. Đây là lỗi đầu tiên.' - Có, tên của tham số là sai (giá trị không phải là tên thư mục). Nhưng bạn có thể cho bất kỳ tên nào bạn muốn. Tại sao nó là một lỗi? –

+0

Tôi không viết chính xác. Đó là lỗi tiềm ẩn. Tìm kiếm trong tiểu sử của Jasper theo đường dẫn $ P {SUBREPORT_DIR}. Do đó, tốt hơn nên xác định tham số này làm thư mục. – sanBez

+0

Động cơ * JR * không biết về '$ P {SUBREPORT_DIR}', nó không phải là thông số tích hợp. –

1

Tôi đã gặp sự cố này trước đó. Cách tiếp cận của tôi là - tôi đang gửi thư mục tuyệt đối trong một tham số nói thư mục_path. Và sau đó trong biểu thức báo cáo phụ tôi đang sử dụng
new File(($P{folder_path} + "*.jasper").
tệp * .jasper này có thể được thay thế bằng "\\inner_folder\\*.jasper". Và điều này làm việc hoàn hảo

0

Điều này xảy ra với tôi theo thời gian và luôn là hệ điều hành nền tảng là yếu tố quyết định chính tại sao một số mã hoạt động và các mã khác không hoạt động. Tuy nhiên những gì đã luôn luôn làm việc là tài liệu tham khảo tương đối thay vì tham chiếu tuyệt đối.

Đề xuất của tôi sẽ là nếu giải pháp của cjava không hoạt động, là tìm hiểu JasperReport đang làm gì trên Đĩa. Tùy thuộc vào nền tảng của bạn, * nix, Windows, Bạn có thể cần phải tìm ra những gì hệ thống gọi JasperReports đang chạy để tìm đường dẫn nó đang sử dụng. Trong ứng dụng của tôi, tôi thấy rằng mặc dù tôi đã chỉ định một tham chiếu đường dẫn ít hoạt động trước đó, một số nền tảng sẽ tìm đường khác nhau và không tìm thấy báo cáo.

Một số câu hỏi khác về cách khắc phục sự cố hệ thống gọi:

* nix - strace

strace java applet

Windows - Process Monitor

On Windows, how can I find what files a given process is using? Is there software that does this?

Mac - DTruss

ltrace equivalent for osx?

Chúc may mắn.

0

cố gắng để gửi SUBREPORT_DIR tham số từ mã. Có thể nó bị thiếu ... nếu bạn sử dụng maven, hãy kiểm tra thẻ thư mục tài nguyên trong tệp pom.xml và so sánh chúng.

params.put("SUBREPORT_DIR", "reports/report/blablaFolder/"); 
Các vấn đề liên quan