2013-09-06 19 views
5

Mi fa impazzire .. L'ultima ora sto cercando di capire perché il mio rapporto ha smesso di funzionare subito dopo aver aggiunto un sottoreport. Ho già controllato e provato tutti i problemi simili here , here e here. Senza successo .. Subreport è nella stessa directory di sicuro .. La definizione assomiglia:JasperReports: Impossibile individuare il sottoreport

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

Dove $ P {} SUBREPORT_DIR è "/valid/path/sub.report.jasper"

E io ancora ricevendo un errore: Resource not found at /valid/path/sub.report.jasper

PERCHÉ ??

+0

Può essere un problema di autorizzazioni su * nix OS? –

+0

@AlexK Io non la penso così .. Posso accedere alle immagini nella stessa cartella o interna dallo stesso rapporto .. – nKognito

+0

'sub.report.jasper' - È un nome di file, non una cartella? –

risposta

5

In primo autore messaggio dice:
Dove $ P {} SUBREPORT_DIR è "/valid/path/sub.report.jasper"

$ P {SUBREPORT_DIR} è una directory , ma non nome file. È il primo errore.

Il secondo: talvolta jasper non riesce a trovare il sottoreport, anche il percorso è corretto.

Il modo per risolvere questo problema:

  1. Passo $ P {SUBREPORT_DIR} in principale relazione (in questo caso: "/ valido/percorso /"), mettere questo parametro in HashMap - modo standard passare i parametri in diaspro
  2. Passo $ P {SUBREPORT_DIR} dalla principale rapporto in sottoreport come parametro: $ P {SUBREPORT_DIR} rapporto principale -> $ P {SUBREPORT_DIR} di sottoreport (in questo modo utilizzato quando esistono subsubreport, che chiamata dal sottoreport)
  3. Nel rapporto principale impostato espressione sottoreport da $ P {} SUBREPORT_DIR + "sub.report.jasper"

Buona fortuna

+0

'$ P {SUBREPORT_DIR} è una directory, ma non il nome del file. È il primo errore. - Sì, il nome del parametro è sbagliato (il valore non è un nome di cartella). Ma puoi dare qualsiasi nome tu voglia. Perché è un errore? –

+0

Non sono esattamente scritto. È un potenziale errore. Jasper cerca i sottoreport nel percorso $ P {SUBREPORT_DIR}. Pertanto è meglio definire questo parametro come una directory. – sanBez

+0

Il motore * JR * non conosce '$ P {SUBREPORT_DIR}', non è un parametro predefinito. –

1

ho avuto questo problema in precedenza. mio approccio è stato - inviavo la cartella in assoluto in un parametro dire folder_path .E poi nell'espressione sub-report stavo usando
new File(($P{folder_path} + "*.jasper").
questo file * .jasper può essere sostituito da "\\inner_folder\\*.jasper". E questo ha funzionato perfettamente

0

Questo mi succede di tanto in tanto, ed è sempre stato un OS della piattaforma che è il fattore decisivo per spiegare perché un codice funziona, e altri no. Tuttavia, ciò che ha sempre funzionato erano riferimenti relativi invece di riferimenti assoluti.

Il mio suggerimento sarebbe se il lavoro doesnt soluzione di cjava, è quello di scoprire che cosa JasperReports sta facendo sul disco. A seconda della piattaforma, * nix, Windows, potrebbe essere necessario capire quale sistema chiama JasperReports per trovare il percorso che sta utilizzando. Nella mia applicazione ho scoperto che anche se stavo specificando un riferimento senza path che funzionasse prima, alcune piattaforme avrebbero percorso la ricerca in modo diverso e non riusciranno a trovare il report.

Alcune altre domande su come risolvere le chiamate di sistema:

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

Good Luck.

0

tenta di inviare SUBREPORT_DIR parametro dal codice. Forse manca ... se usi Maven, controlla il tag della directory delle risorse in pom.xml e confrontale.

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