У меня есть ошибка с использованием Jaspersoft Studio с Oracle Database. Как только появятся некоторые данные, следующая строка
<printWhenExpression><![CDATA[$P{REPORT_TYPE}.substring(0,1)=="R"? $F{REASON_DELETED}:$F{REASON_ADOC}]]></printWhenExpression>
выдает следующую ошибку:
net.sf.jasperreports.engine.JRException: java.lang.ClassCastException: java.lang.String не может быть добавлено в java.lang.Boolean
Я не понимаю, почему Jasper Studio применила его к булевому, поскольку он определен как String:
<field name="REASON_ADOC" class="java.lang.String"/>
<field name="REASON_DELETED" class="java.lang.String"/>
и SQL тоже подходит для меня:
NVL(cr.REASON_ADHOC,'-') AS reason_adoc,
NVL(cr.REASON_DELETED,'-') AS reason_deleted,
а также в представлении/таблице:
REASON_DELETED VARCHAR2(250)
REASON_ADHOC VARCHAR2(4000)
Вы правы, ваше выражение возвращает строку. Но printWhenExpression
ожидает булево выражение в качестве содержимого. Согласно документам:
printWhenExpression Определение булевого выражения, которое будет определять, должен ли элемент или полоса печататься или нет.
Не понятно, чего вы пытаетесь достичь. textFieldExpression
этого вы можете использовать textFieldExpression
.