这是我的表达代码:
($F{Personel_ODEME}.equals(Boolean.TRUE)) ? "PAID" : "NO PAID"
如果Personel已付款,她/他的Jasper税务报告将显示为 PAID ,否则为 NO PAID . 在DB中,此字段是布尔类型,但表达式返回String类型 . 所以我收到了 Cannot cast from String to Boolean 错误 .
PAID
NO PAID
Cannot cast from String to Boolean
问题源于你的测试 $F{Personel_ODEME}.equals(Boolean.TRUE) ,Jasper认为这是 String 到 Boolean 的比较,并不喜欢 . 要解决此问题,请尝试:
$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) 会导致错误 .
"true".equals(Boolean.TRUE)
edit:
这似乎是一个Jasper 'PrintWhen'表达式,它允许您确定是否打印单元格的内容 . 它期望 Boolean.TRUE 或 Boolean.FALSE 作为其返回值 . 当你返回"PAID"时,Jasper试图将 String 评估为 Boolean ,它不能,所以它会抛出异常 .
Boolean.TRUE
Boolean.FALSE
好的,我修好了 . 我将 $F{Personel_ODEME} 的类型更改为String,然后它就像魅力一样 .
$F{Personel_ODEME}
您必须将字段的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
试试这个:
Boolean.valueOf($F{Personel_ODEME}.equals('TRUE')) ? "PAID" : "NO PAID"
($F{Personel_ODEME}==true?"PAID":"NO PAID")
注意:true(关键字)区分大小写 . 并且不应该是资本(TRUE)
5 回答
问题源于你的测试
$F{Personel_ODEME}.equals(Boolean.TRUE)
,Jasper认为这是String
到Boolean
的比较,并不喜欢 . 要解决此问题,请尝试:这将导致
String
与String
的比较 .值得注意的是,在Java中,
"true".equals(Boolean.TRUE)
会导致错误 .edit:
这似乎是一个Jasper 'PrintWhen'表达式,它允许您确定是否打印单元格的内容 . 它期望
Boolean.TRUE
或Boolean.FALSE
作为其返回值 . 当你返回"PAID"时,Jasper试图将String
评估为Boolean
,它不能,所以它会抛出异常 .好的,我修好了 . 我将
$F{Personel_ODEME}
的类型更改为String,然后它就像魅力一样 .您必须将字段的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
试试这个:
注意:true(关键字)区分大小写 . 并且不应该是资本(TRUE)