Jasper报告中的表达式值:“无法从String转换为布尔值”错误

时间:2009-07-19 00:47:37

标签: java jasper-reports

这是我的表达代码:

($F{Personel_ODEME}.equals(Boolean.TRUE)) ? "PAID" : "NO PAID"

如果Personel已付款,则她/他的Jasper税务报告将显示为PAID,否则为NO PAID。在DB中,此字段是布尔类型,但表达式返回String类型。所以我收到Cannot cast from String to Boolean错误。

5 个答案:

答案 0 :(得分:10)

问题源于您的测试$F{Personel_ODEME}.equals(Boolean.TRUE),Jasper认为这是StringBoolean的比较,并不喜欢。要解决此问题,请尝试以下操作:

($F{Personel_ODEME}.equals(Boolean.TRUE.toString())) ? "PAID" : "NO PAID"

这将导致StringString比较。

值得注意的是,在Java中,"true".equals(Boolean.TRUE)会导致错误。

编辑

这似乎是Jasper'PrintWhen'表达式,它允许您确定是否打印单元格的内容。期望Boolean.TRUEBoolean.FALSE作为其返回值。当您返回“PAID”时,Jasper会尝试将String评估为Boolean,但它不能,因此它会抛出异常。

答案 1 :(得分:3)

好的,我修好了。我将$F{Personel_ODEME}的类型更改为String,然后它就像魅力一样。

答案 2 :(得分:2)

您必须将字段的Class Expression更改为java.lang.String,因为默认情况下它将是java.lang.Boolean。当它评估你的if并尝试返回“PAID”或“NO PAID”时,该字段会尝试将其转换为Boolean,以便显示它。

所有功劳归于:

http://jasperforge.org/plugins/espforum/view.php?group_id=83&forumid=101&topicid=61775

答案 3 :(得分:1)

试试这个:

Boolean.valueOf($F{Personel_ODEME}.equals('TRUE')) ? "PAID" : "NO PAID" 

答案 4 :(得分:0)

($F{Personel_ODEME}==true?"PAID":"NO PAID")

注意:true(关键字)区分大小写。并且不应该是资本(TRUE)