как передать путь к файлу яшмы в подотчет - PullRequest
4 голосов
/ 13 сентября 2010

Я использую инструмент iReport вместе с JasperReports 1.3.4.

У меня есть основной отчет, который содержит два подотчета. Один из этих подотчетов имеет встроенный подотчет. Все файлы .jasper находятся в одном каталоге.

iReport сгенерировал параметр с именем SUBREPORT_DIR. Выражение subreportExpression выражает имя файла подотчета как ![CDATA[$P{SUBREPORT_DIR} + "subreport.jasper"].

Все отлично работает, когда отчет генерируется из iReport. Но у меня есть небольшое веб-приложение на Java, которое я пытаюсь использовать для создания отчетов. Я передаю "SUBREPORT_DIR" параметр JasperFillManager.fillReport(String sourceFileName, Map parameters, JRBeanCollectionDatasource). Для этого SUBREPORT_DIR устанавливается каталог, в котором находится главный отчет.

fillReport выдает исключение:

 net.sf.jasperreports.engine.JRException: Could not load object from location :
    .sub-subreport.jasper.

Похоже, что первый подотчет пытается обработать его subreport(embedded subreport), но SUBREPORT_DIR не разрешается или не используется должным образом для создания имени подотчета.

Есть что-то, что я пропускаю? Как обрабатывать этот сценарий?

Ответы [ 4 ]

5 голосов
/ 13 октября 2010

Нажмите Subreport1, перейдите к properties tab -> Subreport properties -> Parameters

Вы передадите свой параметр ' MasterReport ' SUBREPORT_DIR в качестве параметра в ' Subreport1 '. Создать эту запись:

Имя: SUBREPORT_DIR Выражение: $P{SUBREPORT_DIR}

Не забудьте перекомпилировать ваши отчеты и обязательно переиздать ваше веб-приложение на сервере приложений.

4 голосов
/ 13 мая 2011

У меня возникла та же проблема, и я установил для SUBREPORT_DIR полное имя пакета, содержащего мои отчеты.

Например:

"com / mycomp / myapp / reports /"

Наши настройки похожи в том, что у вас есть все отчеты в одном каталоге.Разница в том, что я запускаю свое приложение с рабочего стола (Java SE).Тем не менее, мои отчеты были помещены в файл JAR.Когда я попытался установить для SUBREPORT_DIR значение c: \ path \ to \ app \ myapp.jar! \ Com \ mycomp \ myapp \ reports, Джасперу не удалось найти файл.

Надеюсь, это поможет.

2 голосов
/ 01 августа 2011

Как уже объяснил Марсио , ваш параметр SUBREPORT_DIR необходимо передать из отчета о вызовах в подотчет. Использование относительного пути с . или ./ ненадежно, всегда предпочтительнее абсолютный путь.

Итак, вы должны написать в своем файле jrxml:

<subreport isUsingCache="false">
    <subreportParameter name="SUBREPORT_DIR">
        <subreportParameterExpression><![CDATA[$P{SUBREPORT_DIR}]]></subreportParameterExpression>
    </subreportParameter>
    <subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "mySubreport.jasper"]]></subreportExpression>
</subreport>

Вы должны передать subreportParameterExpression с помощью $P{SUBREPORT_DIR}, в противном случае он не будет передавать параметры (недостаточно только установки <subreportParameter name="SUBREPORT_DIR"/>).

0 голосов
/ 13 августа 2014

просто установите $P{SUBREPORT_DIR} в качестве приглашения и передайте свое значение (путь к каталогу может быть действителен как c:\something.jasper вместо c:\\something.jasper)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...