3 ответов:
Ждали долго .. но никакого ответа от Stackoverflow... Так или иначе, я нашел свое решение..
Сначала в вашей сводной полосе поставьте эту строку
<printWhenExpression><![CDATA[new Boolean($P{REPORT_PARAMETERS_MAP}.put("LastPageNumber",$V{PAGE_NUMBER}).equals("dummyPrintWhen"))]]></printWhenExpression>Помните, что эта строка должна быть только в сводной полосе отчета.
После этого вы можете сравнить этот параметр в любой момент времени в вашем отчете, чтобы найти номер последней страницы .
Например
<printWhenExpression><![CDATA[new Boolean(!$V{PAGE_NUMBER}.equals($P{REPORT_PARAMETERS_MAP}.get("LastPageNumber")))]]></printWhenExpression>
Со следующей печатью, когда выражение итоговая полоса печатается снова:
new Boolean(($P{REPORT_PARAMETERS_MAP}.put( "LastPageNumber",$V{PAGE_NUMBER}).equals("dummyPrintWhen")) || Boolean.TRUE)Вы также можете использовать тест containskey tot для существования ключа:
new Boolean(!$P{REPORT_PARAMETERS_MAP}.containsKey("LastPageNumber"))Числовые выражения также работают, это выражение принимает значение true на каждой странице, кроме той, на которой установлен параметр:
new Boolean($P{REPORT_PARAMETERS_MAP}.get("LastPageNumber") < $V{PAGE_NUMBER})Моя проблема заключалась в том, что я создал несколько групповых колонтитулов для нескольких перекрестных таблиц в конце моего отчета, с константой в качестве группового выражения, поэтому они печатаются только однажды. Установив параметр в первом нижнем колонтитуле, я теперь могу, наконец, переписать заголовки столбцов, не прибегая к вложенным отчетам. Отличная работа!!
Берри.
К сожалению, Ваш подход не сработал для меня, я не знаю, почему.. есть некоторые вещи в вашем коде, которые подвержены ошибкам, как это
<![CDATA[new Boolean($P{REPORT_PARAMETERS_MAP}.put("LastPageNumber",$V{PAGE_NUMBER}).equals("dummyPrintWhen"))]]></printWhenExpression>Я думаю на самом деле, что
Summary Bandвызывается только один раз, но у вас есть плохая практика программирования в этом, потому что если нет ключа, ассоциированного сKEY in the MAP, он вернет null, и вы вызовете методequalsна нем вы получитеNULLPOINTEREXCEPTION, но я думаю, что не в этом случае.Вы должны повернуть вспять вот так
<![CDATA[new Boolean("dummyPrintWhen".equals($P{REPORT_PARAMETERS_MAP}.put("LastPageNumber",$V{PAGE_NUMBER})))]]></printWhenExpression>В обходной путь, который я использовал в этом вопросе, заключается в следующем.
1). создайте параметр в
jasperreportsparameter name="totalRecordsOnReport" class="java.lang.Integer"2). передайте итоговые записи вашей детализации в качестве параметра.
HashMap<Object,Object>parameters=.... parameters.put("totalRecordsOnReport",yourDetailRowCount);Мне нужно напечатать некоторые вещи только на последней странице под детализацией, и я использую этот код.
component print when expression$V{REPORT_COUNT}.equals($P{totalRecordsOnReport})И печатает на последней странице.
Comments