这是我的表达代码:
($F{Personel_ODEME}.equals(Boolean.TRUE)) ? "PAID" : "NO PAID"
如果Personel已付款,则她/他的Jasper税务报告将显示为PAID
,否则为NO PAID
。在DB中,此字段是布尔类型,但表达式返回String类型。所以我收到Cannot cast from String to Boolean
错误。
答案 0 :(得分:10)
问题源于您的测试$F{Personel_ODEME}.equals(Boolean.TRUE)
,Jasper认为这是String
到Boolean
的比较,并不喜欢。要解决此问题,请尝试以下操作:
($F{Personel_ODEME}.equals(Boolean.TRUE.toString())) ? "PAID" : "NO PAID"
这将导致String
到String
比较。
值得注意的是,在Java中,"true".equals(Boolean.TRUE)
会导致错误。
编辑
这似乎是Jasper'PrintWhen'表达式,它允许您确定是否打印单元格的内容。期望Boolean.TRUE
或Boolean.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)