如何避免jasper报告中的空值

时间:2010-07-05 05:10:24

标签: 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。有什么办法可以避免吗?

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

14 个答案:

答案 0 :(得分:39)

将属性isBlankWhenNull设置为true。

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

答案 1 :(得分:31)

在表达式中您可以使用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}

答案 2 :(得分:9)

@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})

答案 3 :(得分:5)

要首先解决此问题,请检查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}

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}

答案 4 :(得分:4)

如果您可以使用 jasperreports-functions 并且想要输出String值,则可以使用函数 T()来执行此操作,该函数返回文本字符串或空字符串。 / p>

  

T($ F {的firstName})

答案 5 :(得分:3)

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

答案 6 :(得分:1)

我为报告中的每个字段选中了“空白时为空”,并且仍然在字段上看到空值。所以,我使用了报表表达式。

由于每个报告变量都是一个字符串,因此要检查是否使用null:

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

答案 7 :(得分:0)

你可以写一个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

答案 8 :(得分:0)

如果你在ecliple + jasper softReports工作,你只需要在步骤之下休息 1.选择字段+ 右键单击并选择 showProperties 选项 2.单击TextField选择 BlankWhenNull 3.编译和重建检查它。

答案 9 :(得分:0)

我有类似的情况,如果我有null参数,我想避免在输出中显示 null
我在表达式编辑器中使用T($P{city}),如果你没有将参数传递给它,它会评估为清空字符串

  

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

示例用法:

$P{name} + " " + (T($P{city}).isEmpty() ? "" : " from " )+ (T($P{city}).isEmpty() ? "" : "\"" +  T($P{city}) + "\"")

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

  来自&#34; Riyadh&#34;

的abdulkahliq

如果我没有将参数传递给$ P {city},结果为:

  

abdulkahliq

谢谢和问候,

答案 10 :(得分:0)

如果 你的字段是字符串只是勾选属性(BLANK WHEN NULL)。 否则使用三元运算符

  

如果为null,则打印其他内容。

field==null?whatever:field 
field=null?false:true

这两者都应该解决这个问题。

答案 11 :(得分:0)

请尝试以下操作:

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

或者 设置报告属性:    资源缺失类型时:键入Empty

两者都适用于我的情况。

答案 12 :(得分:0)

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

答案 13 :(得分:-1)

($F{address_street1} + " " + $F{address_street2} + " " + $F{address_state} + " " +
    $F{address_country} + " " + $F{address_zip}).replaceAll("null", "")