Jasper reports 如何避免jasper报告中的空值

Jasper reports 如何避免jasper报告中的空值,jasper-reports,Jasper Reports,我的jasper报告中有一个字段,其表达式值如下 $F{address_street1}+" "+$F{address_street2}+ " " +$F{address_state} + " "+$F{address_country}+ " "+$F{address_zip} 我的问题是,如果这里的任何一个字段都是null,那么我会得到null值 101 Main St****null****ILUnited States12345 请注意突出显示的null。有什么办法可以避免吗 我曾尝

我的jasper报告中有一个字段,其表达式值如下

$F{address_street1}+" "+$F{address_street2}+ " " +$F{address_state} + " "+$F{address_country}+ " "+$F{address_zip}
我的问题是,如果这里的任何一个字段都是null,那么我会得到null值

101 Main St****null****ILUnited States12345 
请注意突出显示的null。有什么办法可以避免吗


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

将属性
isBlankWhenNull
设置为true

    在iRead中选中“空”复选框,当选中字段时。
  • 在jasper jrxml文件中:

在表达式中,允许您使用Java代码

因此,您需要做的是检查field的值是否为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}

@瓦什,是的,这就是我要做的,除了我想你们可能想把每个表达式放在括号里,这样每个表达式都独立于其他表达式。像这样:

($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})
我对报告中的每个字段都选中了选项(空时为空),但仍然可以看到字段为空。所以,我使用了报告表达式

由于每个报表变量都是字符串,要检查是否为空,请使用:

$F{address_stree2}.equals("null") 

您可以编写java代码

 package com.xyz

 Class ReportUtil 
  {
      public static String getMyString (String str1 , String str2)
         {
             if((str1!=null) && (str2!=null))
                 return str1 + " " + str2 ;
             else if str1==null
                  return str2 ; 
             return str1 ;                            
          }

   }
在JRXML中,可以在文本框中使用以下表达式

com.xyx.ReportUtil.getMyString ($F{firstName},$F{lastName}) 
将“为空时为空”属性设置为true

问候,


Ankush

如果您可以使用jasperreports函数并希望输出字符串值,则可以使用返回文本字符串或空字符串的函数T()执行此操作

($F{address_street1}.equals(null) ? "" : $F{address_street1}+ " ") + 
($F{address_street2}.equals(null)l ? "" : $F{address_street2}+ " ") +
($F{address_state}.equals(null) ? "" : $F{address_state}  + " ") +            
($F{address_country}.equals(null) ? "" : $F{address_country}+ " ") +           
($F{address_zip} .equals(null) ? "" : $F{address_zip})
T($F{firstName})


若要首先解决此问题,请选中IReport中的“字段属性为空时为空”复选框,或者它是否为Jasper jrxml文件:

然后我找到了两种方法来解决这个问题。选择下面描述的一种方式。
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}
二,。使用表达式语法,如

$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}

如果您在ecliple+jasper softReports中工作,只需执行以下步骤即可 1.选择字段+右键单击并选择showProperties选项 2.单击文本字段选择BlankWhenNull
3.编译并重新生成检查它。

我有类似的情况,如果我有null参数,我希望避免在输出中显示null
我在表达式编辑器中使用
T($P{city})
,如果您没有将参数传递给它,它将计算为字符串

T()如果值是字符串,则返回文本字符串,否则返回空字符串 返回字符串

用法示例:

$P{name} + " " + (T($P{city}).isEmpty() ? "" : " from " )+ (T($P{city}).isEmpty() ? "" : "\"" +  T($P{city}) + "\"")
如果我将参数传递给$p{city}
结果是:

来自“利雅得”的abdulkahliq

如果我不将参数传递给$p{city},结果是:

阿卜杜勒卡利克

感谢和问候,

如果 您的字段是字符串,只需在属性上打勾(空时为空)。 否则使用三元运算符

如果为空,则打印其他内容,打印字段

这两种方法都可以解决问题。

尝试以下方法:

$F{address_street1}.toString() == null ? "" : $F{address_street1}+ " " +
$F{address_street2}.toString() == null ? "" : $F{address_street2}+ " " +
$F{address_state}.toString() == null ? "" : $F{address_state}  + " " +
$F{address_country}.toString() == null ? "" : $F{address_country}+ " " +
$F{address_zip}.toString() == null ? "" : $F{address_zip}
或 设置报表属性: 当资源缺少类型时:类型为空


这两种方法都适用于我的情况。

您可以将文本字段高度设置为1,
将Stretch with overflow标志设置为true,null时设置为true,这样,当字段值为空时,它不会在两个字段之间留下空格。

它不起作用,因为我的总字段(由多个单独字段串联而成)不为null,只是字段的一部分为null,我想避免这个答案涵盖了一个非常常见的问题。。。但它不包括这里提出的问题。虽然问题中没有足够的信息可以确定,但将报告语言从“Groovy”更改为“Java”可能就足够了。对于特定的问题,这是不正确的!阅读下面的answar,这不是问题的答案。我不明白人们怎么会对这个答案投那么高的票。我已经这么做了很长时间,但我希望有人有一个不那么详细的解决方案。对我来说也更好:没有妄想症,我有jrxml编译问题。对于仍然在IReport 3.7.4中的任何人来说,这是行不通的。出于某种原因($F{field}==null?x:y)返回null(在java三元运算符中被转换为false)。请更好地格式化它,并解释为什么这是答案。
field==null?whatever:field 
field=null?false:true
$F{address_street1}.toString() == null ? "" : $F{address_street1}+ " " +
$F{address_street2}.toString() == null ? "" : $F{address_street2}+ " " +
$F{address_state}.toString() == null ? "" : $F{address_state}  + " " +
$F{address_country}.toString() == null ? "" : $F{address_country}+ " " +
$F{address_zip}.toString() == null ? "" : $F{address_zip}