Как использовать printWhenExpression в JasperReports

Может кто-нибудь сказать мне, как использовать printWhenExpression JasperReports?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
16
0
66 656
4

Ответы 4

У вас есть ошибка относительно логического?

Потому что вам нужно использовать Boolean вместо примитивного типа.

Так:

$F{mesure} != "PH"
($F{userfd4}).equals("1") ? true : false 

отдал бы cannot cast from boolean to Boolean.

( $F{mesure}.startsWith("PH") ? Boolean.TRUE:Boolean.FALSE ) 
($F{userfd4}).equals("1") ? Boolean.TRUE : Boolean.FALSE  

было бы правильно.

См. Также этот пример


Обновление ноябрь 2015 г. (7 лет спустя)

Петтер Фриберг указывает на в комментариях:

In jasper report 6.0 this is not need:
You can return either boolean or Boolean a simple expression like $F{fieldName}.equals("hello") will work.


Вы можете увидеть демонстрацию этой команды в demo/samples/tableofcontents/reports/TocPart.jrxml

<reportElement style = "Sans_Bold" positionType = "Float" x = "50" y = "0" width = "100" height = "15" isRemoveLineWhenBlank = "true" uuid = "db8b68c6-4430-4199-8967-3ab5c077cb56">
    <property name = "local_mesure_unitx" value = "pixel"/>
    <property name = "com.jaspersoft.studio.unit.x" value = "px"/>
    <printWhenExpression><![CDATA[$F{level} == 1]]></printWhenExpression>
</reportElement>

Это не отвечает на исходный вопрос. Здесь не объясняется, как использовать printWhenExpression. Это только объясняет, что выражению требуется логическое значение. Хотя «этому выражению требуется логическое значение» полезно, оно не совсем отвечает на вопрос «как использовать».

Brian Hamill 11.07.2019 14:11

Я использую TIBCO Jaspersoft® Studio 6.12.2, и мне все еще пришлось использовать старый способ. Он скомпилирован и все еще печатает без ошибок.

g-otn 02.06.2020 00:08

@ g-otn Итак, как вы использовали JasperReports printWhenExpression в вашем случае?

VonC 02.06.2020 08:21

@VonC, я использовал способ вашего ответа (до обновления): $F{somefield}.equals("something") ? Boolean.TRUE : Boolean.FALSE.

g-otn 03.06.2020 09:03

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

По сути, он позволяет отображать или скрывать содержимое ячейки на основе логического выражения. Например, вы можете захотеть отобразить имя человека только в том случае, если этому человеку больше 18 лет, а затем в поле имени, используя выражение printwheneexpress, например:

$F{age} >= 18

Вы также можете использовать статический метод Boolean.valueOf (boolean b). Он выполняет ту же логику, что и "($ F {mesure} .startsWith (" PH ")? Boolean.TRUE: Boolean.FALSE)", и хорошее практическое правило - не воссоздавать колесо.

Boolean.valueOf($F{mesure}.startsWith("PH"))

Boolean.valueOf($F{userfd4}).equals("1"))

$ P {mesure} .equals ("200") должен работать без каких-либо дополнительных деталей. Он будет печатать, если условие истинно

Другие вопросы по теме