如何避免jasper报告中的空值

Sac*_*and 29 jasper-reports

我的jasper报告中有一个字段,其表达式值类似于

$F{address_street1}+" "+$F{address_street2}+ " " +$F{address_state} + " "+$F{address_country}+ " "+$F{address_zip}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果这里的任何字段为null,我得到其他东西之间的空值

101 Main St****null****ILUnited States12345 
Run Code Online (Sandbox Code Playgroud)

注意突出显示的null.有什么办法可以避免吗?

我已经尝试使用布尔表达式检查其中特定字段的空值并将其替换为空白,但这似乎不起作用.

kro*_*ock 42

将该属性设置isBlankWhenNull为true.

  • 在iReport中,选中字段时选中Blank When Null复选框.
  • 在jasper jrxml文件中: <textField isBlankWhenNull="true">

  • 这个答案涵盖了一个非常常见的问题......但它没有涵盖这里提出的问题.虽然问题中没有足够的信息可以确定,但将报告语言从"Groovy"更改为"Java"可能就足够了. (5认同)
  • 它不起作用,因为我的总字段(这是一个多个单独字段的串联)不是null只是null的一部分字段,我想避免 (4认同)

Dam*_*ash 35

在表达式中您可以使用Java代码.

所以你需要做的是检查字段的值是否为null,如果然后用空字符串替换它.

$F{address_street1} == null ? "" : $F{address_street1}+ " " +
$F{address_street2} == null ? "" : $F{address_street2}+ " " +
$F{address_state} == null ? "" : $F{address_state}  + " " +
$F{address_country} == null ? "" : $F{address_country}+ " " +
$F{address_zip} == null ? "" : $F{address_zip}
Run Code Online (Sandbox Code Playgroud)

  • 对于仍在IReport 3.7.4中的任何人来说,这都行不通.出于某种原因($ F {field} == null?x:y)返回null(在java三元运算符中将其转换为false). (3认同)

rog*_*ler 12

@Vash,是的,这就是我要做的事情,除了我认为您可能希望将每个表达式放在括号内,以便每个表达式独立于其他表达式.像这样:

($F{address_street1} == null ? "" : $F{address_street1}+ " ") +
($F{address_street2} == null ? "" : $F{address_street2}+ " ") +
($F{address_state} == null ? "" : $F{address_state}  + " ") +
($F{address_country} == null ? "" : $F{address_country}+ " ") +
($F{address_zip} == null ? "" : $F{address_zip})
Run Code Online (Sandbox Code Playgroud)

  • 我已经这么做了很久但我希望有人会有一个不那么详细的解决方案. (2认同)

pan*_*ser 7

如果你可以使用jasperreports-functions并且你想输出String值,你可以使用函数T()来返回文本String或空String.

T($ F {FirstName}您好)


Anu*_*osh 7

要首先解决此问题,请在IReport中检查字段属性Blank at null复选框,或者它是Jasper jrxml文件:<textField isBlankWhenNull="true">.

然后我找到了解决这个问题的两种方法.选择下面介绍的一种方式.
1.使用这样的表达式语法

$F{variableName}.equals( "0" )? "" : $F{variableName}

你可以使用像这样的代码

$F{address_street1}.equals("0")? "" : $F{address_street1} + " " +  
$F{address_street2}.equals("0")? "" : $F{address_street2} + " " +
$F{address_state}.equals("0")? "" : $F{address_state} + " " +  
$F{address_country}.equals("0")? "" : $F{address_country} + " " +
$F{address_zip}.equals("0")? "" : $F{address_zip}
Run Code Online (Sandbox Code Playgroud)

2.使用表达式语法

$F{variableName}== null ? "" : $F{variableName}

你可以使用像这样的代码

$F{address_street1} == null ? "" : $F{address_street1} + " " +  
$F{address_street2} == null ? "" : $F{address_street2} + " " +
$F{address_state} == null ? "" : $F{address_state} + " " +  
$F{address_country} == null ? "" : $F{address_country} + " " +
$F{address_zip} == null ? "" : $F{address_zip}
Run Code Online (Sandbox Code Playgroud)