JRException: java.lang.ClassCastException: java.lang.String 无法转换为 java.lang.Boolean

JRException: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean

我在将 Jaspersoft Studio 与 Oracle 数据库结合使用时遇到错误。 一旦有一些数据,下面的行

<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 cannot be cast to java.lang.Boolean

我不明白,为什么 Jasper Studio 会将其转换为布尔值,因为它被定义为字符串:

<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,

还有 view/table:

REASON_DELETED  VARCHAR2(250)
REASON_ADHOC    VARCHAR2(4000)

你是对的,你的表达式 returns 是一个字符串。但是 printWhenExpression 期望布尔表达式作为内容。根据 docs:

printWhenExpression Definition of a Boolean expression that will determine if the element or the band should be printed or not.

不清楚您要达到什么目的。您可能想改用 textFieldExpression