首页 文章

如何避免jasper报告中的空值

提问于
浏览
25

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

$F{address_street1}+" "+$F{address_street2}+ " " +$F{address_state} + " "+$F{address_country}+ " "+$F{address_zip}

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

101 Main St****null****ILUnited States12345

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

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

14 回答

  • 2

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

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

    T($ F

  • 0

    将属性 isBlankWhenNull 设置为true .

    • 在iReport中,选中字段时选中Blank When Null复选框 .

    • 在jasper jrxml文件中: <textField isBlankWhenNull="true">

  • 5

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

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

    然后我找到 two ways 来解决这个问题 . 选择下面介绍的一种方式 .
    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}
    
  • 40
    ($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})
    
  • 5

    我有选项(空白时为空)检查报告中的每个字段,并仍然在字段上看到空值 . 所以,我使用了报表表达式 .

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

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

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

    将“Is null null”属性设置为true

    问候,

    Ankush

  • 0

    如果你正在ecliple jasper softReports中工作,你只需要在步骤1之后休息 . 选择字段右键并选择 showProperties 选项2.click TextField select BlankWhenNull 3.Compile and Rebuild检查它 .

  • 0

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

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

    example usage:

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

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

    来自“利雅得”的abdulkahliq

    如果我没有将参数传递给$ P ,结果是:

    abdulkahliq

    感谢致敬,

  • 0

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

    如果为null打印其他内容,则打印该字段 .

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

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

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

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

    两者都适用于我的情况 .

  • 8

    您可以将textfield height设置为1,将Stretch with overflow标志设置为true,将null设置为true,这样当字段值为空时,它不会留下空格 .

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

相关问题