这是我的表情代码:表达式值:“无法从字符串转换为布尔值”的错误
($F{Personel_ODEME}.equals(Boolean.TRUE)) ? "PAID" : "NO PAID"
如果企业人事支付,他/她的碧玉税报告会读PAID
,否则NO PAID
。在DB中,这个字段是布尔类型,但表达式返回一个String类型。所以我得到一个Cannot cast from String to Boolean
错误。
这是我的表情代码:表达式值:“无法从字符串转换为布尔值”的错误
($F{Personel_ODEME}.equals(Boolean.TRUE)) ? "PAID" : "NO PAID"
如果企业人事支付,他/她的碧玉税报告会读PAID
,否则NO PAID
。在DB中,这个字段是布尔类型,但表达式返回一个String类型。所以我得到一个Cannot cast from String to Boolean
错误。
好的,我修好了。我将$F{Personel_ODEME}
的类型更改为String,然后它像魅力一样工作。
该问题源于您的测试$F{Personel_ODEME}.equals(Boolean.TRUE)
,其中贾斯珀认为是String
到Boolean
比较,并不喜欢。为了解决这个问题,试试这个:
($F{Personel_ODEME}.equals(Boolean.TRUE.toString())) ? "PAID" : "NO PAID"
这将导致String
到String
比较。
请注意,在Java中,"true".equals(Boolean.TRUE)
会导致错误。
编辑:
这似乎是一个碧玉“PrintWhen”表达,它允许以确定是否打印的细胞或不的内容。它期望Boolean.TRUE
或Boolean.FALSE
作为它的返回值。当您返回“PAID”时,Jasper会尝试将String
评估为Boolean
,因此它会抛出异常。
试试这个:
Boolean.valueOf($F{Personel_ODEME}.equals('TRUE')) ? "PAID" : "NO PAID"
你必须改变类表达式为字段为java.lang.String,因为它会被默认java.lang.Boolean的。当它评估您的if并尝试返回“PAID”或“NO PAID”时,该字段会尝试将其转换为布尔值,以便可以显示它。
一切归功于:
http://jasperforge.org/plugins/espforum/view.php?group_id=83&forumid=101&topicid=61775
($F{Personel_ODEME}==true?"PAID":"NO PAID")
注:真(关键字)是区分大小写的。并且不应该是大写(TRUE)
我相信你的意思是 - “true”.equals(Boolean.TRUE) – 2009-07-19 02:12:21