2010-07-05 40 views
23

Tengo un campo en mi informe de jaspe, que tiene un valor de expresión comoCómo evitar valores nulos en Jasper informa

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

Mi problema es que si cualquiera de los campos en que aquí es nulo consigo el valor nulo entre otras cosas, como

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

Observe el nulo resaltado. ¿Hay alguna manera de evitar eso?

He intentado verificar el valor nulo para un campo en particular usando expresiones booleanas y reemplazándolo con espacios en blanco, pero parece que no funciona.

Respuesta

36

Establezca la propiedad isBlankWhenNull en verdadero.

  • En iReport, marque la casilla de verificación Blank When Null cuando su campo esté seleccionado.
  • En archivo jrxml Jasper: <textField isBlankWhenNull="true">
+2

no funciona porque mi campo total (que es una concatenación de más de un campo individual) no es nulo solo una parte del campo que es nulo, lo que quiero evitar –

+4

Esta respuesta cubre una pregunta muy común. .pero no cubre la pregunta formulada aquí. Aunque no hay suficiente información en la pregunta para estar seguro, probablemente sea suficiente cambiar el idioma del informe de "Groovy" a "Java". – mdahlman

+0

¡NO CORRECTO para la pregunta específica! lea la answar debajo https://stackoverflow.com/a/3186360/1241276 – lory105

27

en la expresión Usted está autorizado a utilizar el código de Java.

Entonces, lo que debe hacer es verificar que el valor del campo sea nulo, y luego reemplazarlo con una cadena vacía.

$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

Dirige a cualquiera que todavía esté en IReport 3.7.4, esto no funciona. Por alguna razón ($ F {field} == null?x: y) devuelve nulo (que se traduce a falso en el operador ternario de java). –

8

@Vash, Sí que es lo que haría, excepto Creo que es posible que desee poner a cada expresión dentro del paréntesis, de manera que cada expresión es independiente de los demás. De esta manera:

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

He estado haciendo esto durante mucho tiempo, pero espero que alguien tenga una solución menos detallada. –

1

Tengo la opción (En blanco cuando es nulo) comprobé para cada campo en el informe y sigo viendo nulos en los campos. Entonces, utilicé expresiones de informe.

Puesto que cada variable de informe es una cadena, para verificar el uso nulo:

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

Usted puede escribir un código 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 ;        
      } 

    } 

En JRXML, puede utilizar la siguiente expresión en el cuadro de texto

com.xyx.ReportUtil.getMyString ($F{firstName},$F{lastName}) 

Set "aparece en blanco cuando nulo" propiedad en true

Saludos,

Ankush

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

si se puede usar JasperReports-funciones y desea Valor de la cadena de salida, puede hacerlo con la función T() que devuelve cadena de texto o cuerda vacía.

T ($ F {NOMBRE})

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

Formatee esto mejor y proporcione una explicación de por qué esta es la respuesta. –

5

Para resolver este problema en primer lugar, comprobar las propiedades de campo en blanco cuando casilla nulo en IReport o si se trata de archivos Jasper jrxml: <textField isBlankWhenNull="true">.

Luego encontré dos formas para solucionar esto. Elija una de las formas descritas a continuación.
1. Utilice la sintaxis de expresiones como esta

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

y se puede usar un código como

$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. Uso sintaxis de expresiones como

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

y se puede utilizar código como

$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

Si está trabajando en softReports ecliple + jaspe que acaba de barbecho de los pasos siguientes campo 1.select + botón derecho del ratón y seleccione showProperties opción 2.click TextField seleccione BlankWhenNull 3.Compile y reconstruir, verificarlo.

0

TENGO caso similar que quiero evitar mostrar nula en la salida si tengo parámetro nulo
yo uso T($P{city}) en el editor de expresión, que se evalúan como cadena vacía si no pasa el parámetro a ella

T() devuelve la cadena de texto si el valor es una cadena, de lo contrario se devuelve una cadena vacía

ejemplo de uso:

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

si paso parámetro en $ P {ciudad}
el resultado es:

abdulkahliq de "Riad"

si no paso el parámetro a $ P {city} el resultado es:

abdulkahliq

Gracias y Saludos,

0

si sus campos son cadenas sólo debe marcar la propiedad de (en blanco cuando NULL). De lo contrario, utilice el operador ternario

si null imprime algo más imprima el campo.

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

Estos tanto debe resolver el problema.

0

seguir los siguientes pasos:

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

O Configurar informes de la propiedad: Cuando falta de recursos de tipo: Tipo vacío

ambas obras en mi caso.

0

Puede configurar el alto del campo de texto como 1, establezca el indicador de desbordamiento con desbordamiento como verdadero y en blanco cuando nulo como verdadero, de modo que cuando el valor del campo esté en blanco no deje espacio en blanco.

Cuestiones relacionadas