2013-09-06 33 views
5

To doprowadza mnie do szaleństwa. Ostatnia godzina Próbuję dowiedzieć się, dlaczego mój raport przestał działać po dodaniu podraportu do niego .. Już sprawdziłem i wypróbowałem wszystkie podobne problemy here , here i here. bez powodzenia .. Podraport jest w tym samym katalogu na pewno .. definicja wygląda następująco:JasperReports: Nie można znaleźć podraportu

<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> 

Gdzie $ {P} SUBREPORT_DIR jest "/valid/path/sub.report.jasper"

i wciąż otrzymuję błąd: Resource not found at /valid/path/sub.report.jasper

DLACZEGO ??

+0

Czy może to być problem uprawnień w systemie * nix? –

+0

@AlexK Nie sądzę .. Mogę uzyskać dostęp do obrazów w tym samym lub wewnętrznym folderze z tego samego raportu .. – nKognito

+0

'sub.report.jasper' - Czy jest to nazwa pliku, a nie folder? –

Odpowiedz

5

W pierwszym komunikacie autor mówi:
Gdzie $ {P} SUBREPORT_DIR jest "/valid/path/sub.report.jasper"

$ {P} SUBREPORT_DIR jest katalog, ale nie nazwa pliku. To pierwszy błąd.

Druga: czasami jaspis nie może znaleźć podraportu, nawet ścieżka jest prawidłowa.

Sposobem na rozwiązanie tego problemu:

  1. Przełęcz $ P {SUBREPORT_DIR} w głównej raportu (w tym przypadku: "/ ważne/path /"), umieścić ten parametr do HashMap - standardowy sposób przekazać parametry język jaspisu
  2. Przełęcz $ P {SUBREPORT_DIR} od głównego raportu do podraportu jako parametr: $ P {SUBREPORT_DIR} raportu głównego -> $ p {SUBREPORT_DIR} z podraportu (w ten sposób używany, gdy istnieje subsubreport, który wywoływanie z podraportu)
  3. W raporcie głównym ustawić wyraz Podraport jako $ {P} + SUBREPORT_DIR "sub.report.jasper"

Powodzenia

+0

'$ P {SUBREPORT_DIR} to katalog, ale nie nazwa pliku. To jest pierwszy błąd. - Tak, nazwa parametru jest błędna (wartość nie jest nazwą folderu). Ale możesz podać dowolne imię, jakie chcesz. Dlaczego to błąd? –

+0

Nie jestem dokładnie napisany. To potencjalny błąd. Podraporty wyszukiwania Jaspera w ścieżce $ P {SUBREPORT_DIR}. Dlatego lepiej jest zdefiniować ten parametr jako katalog. – sanBez

+0

Silnik * JR * nie wie o '$ P {SUBREPORT_DIR}', nie jest parametrem wbudowanym. –

1

Miałem ten problem wcześniej. Moje podejście było - wysyłałem bezwzględny folder w parametrze say folder_path. A następnie w wyrażeniu podraportu używałem
new File(($P{folder_path} + "*.jasper").
ten plik * .jasper można zastąpić przez "\\inner_folder\\*.jasper". I to działało idealnie

0

Zdarza mi się to od czasu do czasu, a jego system operacyjny zawsze jest kluczowym czynnikiem decydującym o tym, dlaczego jakiś kod działa, a inni nie. Jednak zawsze działały odniesienia względne zamiast bezwzględnych odniesień.

Moja sugestia brzmi: jeśli rozwiązanie cjavy nie działa, to dowiedz się, co robi program JasperReports na dysku. W zależności od platformy, * nix, Windows, może zajść potrzeba wykrycia, które wywołania systemowe są uruchamiane przez program JasperReports, aby znaleźć ścieżkę, z której korzysta. W mojej aplikacji stwierdziłem, że pomimo tego, że określałem odwołanie bez ścieżek, które działało wcześniej, niektóre platformy mogłyby inaczej przeszukiwać ścieżkę i nie znaleźć raportu.

Niektóre inne pytania dotyczące sposobu rozwiązywania wywołań systemowych:

* nix - strace

strace java applet

systemu 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?

Powodzenia.

0

spróbuj wysłać SUBREPORT_DIR parametr z kodem. Może go brakuje ... jeśli używasz maven, sprawdź znacznik katalogu zasobów w pom.xml i porównaj je.

params.put("SUBREPORT_DIR", "reports/report/blablaFolder/");