我正在tibco jaspersoft工作室设计Pdf报告。该报告使用的是json数据源。 json文件中有一些子代:
{
...,
"children":[],
...
}
我正在使用子带内的子报告来渲染孩子(当他们在那里时)就好了。 children数组可能是空的(如上例所示),我想分配给包含的band,因此当子项为空时它将消失。
我试图声明字段:
<field name="children" class="java.lang.Object[]">
<fieldDescription>
<![CDATA[children]]>
</fieldDescription>
</field>
和
<printWhenExpression>
<![CDATA[$F{children}.length!=0]]>
</printWhenExpression>
但表达式编辑器一直抱怨消息
当前表达式无效。请验证它!
我还尝试了一些带有NOT(EQUALS())的相同结果的wariants。表达式编辑器将突出显示.length!= 0作为错误。
更新 表达式编辑器中显示的错误似乎不是真正的错误,报告将编译。如果数组为空,则条件有效。否则我得到另一个错误
net.sf.jasperreports.engine.JRException:无法获取JSON的值 类的字段“children”[Ljava.lang.Object;。
孩子是一些结构化的POJOS,确实是Object的实例。
到目前为止,我通过在json数据中添加一些额外的布尔标志来解决这个问题。我不喜欢这个解决方案,但它对我的客户来说已经足够了
答案 0 :(得分:0)
Alex K正在对此作出裁判:
如果您在language="java"
标记上使用language="groovy"
或jasperReport
,那么您的表达式将正常运行,我的猜测是您当前正在使用language="javascript"
有关表达式脚本语言的详细信息,请参阅JRCompiler API
要更改它,请编辑jrxml
,设置正确的属性,或使用报告节点(基本节点)上的IDE属性。
答案 1 :(得分:0)
<printWhenExpression><![CDATA[!$F{children}.toString().equals( "[]" )]]></printWhenExpression>
此代码适用于我,