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

== сравнивает ссылки на объекты в Java и не является исключением для объектов String.

Для сравнения фактического содержимого объектов (в том числе String) необходимо использовать equals.

Если сравнение двух объектов String с использованием == оказывается true, это связано с тем, что объекты String были интернированы, а виртуальная машина Java имеет несколько ссылки указывают на тот же экземпляр String. Не следует ожидать сравнения одного объекта String, содержащего то же содержимое, что и другой объект String, используя == для оценки как true.

13
задан Alex K 18 August 2012 в 14:37
поделиться

3 ответа

У Вас есть ошибка относительно булевской переменной?

Поскольку необходимо использовать булевскую переменную вместо типа примитива.

Так:

$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 лет спустя)

Petter Friberg указывает в комментариях:

В отчете 6.0 о яшме это не потребность:
Можно возвратиться также boolean или Boolean простое выражение как $F{fieldName}.equals("hello") будет работать.


Вы видите демонстрацию той команды в 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>
20
ответ дан 1 December 2019 в 21:12
поделиться

Можно также использовать статический метод "Boolean.valueOf (булевская переменная b)". Это делает точно ту же логику как" ($F ("ph") {mesure} .startsWith? Булевская переменная. TRUE:Boolean. ЛОЖЬ)", и хорошее эмпирическое правило, не воссоздают колесо.

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

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

2
ответ дан 1 December 2019 в 21:12
поделиться

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

В основном это позволяет Вам показывать или скрывать содержание ячейки на основе булева выражения. Например, Вы могли бы хотеть показать имя человека, только если тот человек - более чем 18, затем в поле имени, с помощью printwhenexpression как:

$F{age} >= 18
4
ответ дан 1 December 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: