这是我的表达代码:
($F{Personel_ODEME}.equals(Boolean.TRUE)) ? "PAID" : "NO PAID"
如果支付 Personel,她/他的 Jasper 税务报告将显示为PAID
,否则为NO PAID
。在数据库中,该字段是布尔类型,但表达式返回的是字符串类型。所以我得到一个Cannot cast from String to Boolean
错误。
这是我的表达代码:
($F{Personel_ODEME}.equals(Boolean.TRUE)) ? "PAID" : "NO PAID"
如果支付 Personel,她/他的 Jasper 税务报告将显示为PAID
,否则为NO PAID
。在数据库中,该字段是布尔类型,但表达式返回的是字符串类型。所以我得到一个Cannot cast from String to Boolean
错误。
问题源于你的测试$F{Personel_ODEME}.equals(Boolean.TRUE)
,贾斯珀认为这是一个String
比较Boolean
,不喜欢。要解决此问题,请尝试以下操作:
($F{Personel_ODEME}.equals(Boolean.TRUE.toString())) ? "PAID" : "NO PAID"
这将导致String
比较String
。
值得注意的是,在 Java 中,a"true".equals(Boolean.TRUE)
会导致错误。
编辑:
这似乎是一个 Jasper 'PrintWhen' 表达式,它允许您确定是否打印单元格的内容。它期待Boolean.TRUE
或Boolean.FALSE
作为它的返回值。当您返回“PAID”时,Jasper 会尝试将其评估String
为Boolean
,它不能,因此它会引发异常。
好的,我修好了。我将$F{Personel_ODEME}
' 的类型更改为字符串,然后它就像一个魅力。
您必须将字段的类表达式更改为 java.lang.String,因为默认情况下它将是 java.lang.Boolean。当它评估您的 if 并尝试返回“PAID”或“NO PAID”时,该字段会尝试将其转换为布尔值以便显示。
所有功劳归于:
http://jasperforge.org/plugins/espforum/view.php?group_id=83&forumid=101&topicid=61775
尝试这个:
Boolean.valueOf($F{Personel_ODEME}.equals('TRUE')) ? "PAID" : "NO PAID"
($F{Personel_ODEME}==true?"PAID":"NO PAID")
注意:true(keyword) 区分大小写。并且不应该是大写(TRUE)