首页 文章

如何在Jasper pdf报告中测试json数组属性的大小

提问于
浏览
0

我在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作为错误 .

Update 表达式编辑器中显示的错误似乎不是真正的错误,报告将编译 . 如果数组为空,则条件有效 . 否则我得到另一个错误

net.sf.jasperreports.engine.JRException:无法获取类[Ljava.lang.Object;的JSON字段“children”的值 .

孩子是一些结构化的POJOS,确实是Object的实例 .

到目前为止,我通过在json数据中添加一些额外的布尔标志来解决这个问题 . 我不喜欢这个解决方案,但它对我的客户来说已经足够了

2 回答

  • 0
    <printWhenExpression><![CDATA[!$F{children}.toString().equals( "[]" )]]></printWhenExpression>
    

    这段代码对我有用,

  • 0

    Alex K在评论中对此作出裁判:

    如果在 jasperReport 标签上使用 language="java"language="groovy" ,您的表达式将正常工作,我的猜测是您当前正在使用 language="javascript"

    有关 Expressions Scripting Language 的详细信息,请参阅JRCompiler API

    要更改它,请编辑 jrxml ,设置正确的属性,或使用报告节点(基本节点)上的IDE属性 .

相关问题