2010-07-05 12 views
23

J'ai un champ dans mon rapport de jaspe qui a une valeur d'expression commeComment éviter les valeurs nulles dans JasperReports

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

Mon problème est que si l'un des champs ici est nul, je reçois la valeur null entre d'autres choses comme

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

Notez la null sélectionnée. Est-ce que je peux éviter cela?

J'ai essayé de vérifier la valeur nulle pour un champ particulier en utilisant l'expression booléenne et en la remplaçant par un blanc, mais cela ne semble pas fonctionner.

Répondre

36

Définissez la propriété isBlankWhenNull sur true.

  • Dans iReport, cochez la case Blank When Null lorsque votre champ est sélectionné.
  • Dans jaspe fichier jrxml: <textField isBlankWhenNull="true">
+2

cela ne fonctionne pas parce que mon champ total (qui est une concaténation de plus d'un champ individuel) n'est pas nul seulement une partie de champ qui est nulle, que je veux éviter –

+4

Cette réponse couvre une question très commune .. mais cela ne couvre pas la question posée ici. Bien qu'il n'y ait pas assez d'informations dans la question pour être sûr, il suffirait probablement de changer la langue du rapport de "Groovy" à "Java". – mdahlman

+0

PAS CORRECT pour la question spécifique! lisez la barre de réponse ci-dessous https://stackoverflow.com/a/3186360/1241276 – lory105

27

Dans l'expression Vous êtes autorisé à utiliser le code Java.

Donc, ce que vous devez faire est de vérifier que la valeur de champ est nulle si elle est alors remplacer par une chaîne vide.

$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

La tête à tout le monde encore dans IReport 3.7.4, cela ne fonctionne pas. Pour une raison quelconque ($ F {field} == null?x: y) renvoie null (qui est traduit en false dans l'opérateur ternaire java). –

8

@Vash, Oui c'est ce que je ferais sans que je pense que vous pourriez vouloir mettre chaque expression des parenthèses à l'intérieur de sorte que chaque expression est indépendante des autres. Comme ceci:

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

Je fais cela depuis longtemps mais j'espère que quelqu'un a une solution moins verbeuse. –

1

J'ai l'option (vide quand nul) cochée pour chaque champ dans le rapport et toujours voir des valeurs nulles sur les champs. Donc, j'ai utilisé des expressions de rapport.

Étant donné que chaque variable de rapport est une chaîne, pour vérifier l'utilisation null:

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

Vous pouvez écrire un code 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, vous pouvez utiliser l'expression suivante dans la zone de texte

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

Set "est vide lorsque null" propriété sur true

Cordialement,

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 vous pouvez utiliser JasperReports-fonctions et que vous voulez chaîne de sortie valeur, vous pouvez le faire avec la fonction T() qui renvoie le texte à cordes ou chaîne vide.

T ($ F {firstname})

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

Veuillez formater ceci mieux et donnez une explication de pourquoi c'est la réponse. –

5

Pour résoudre ce problème d'abord, vérifier les propriétés du champ vide lorsque la case nulle dans IReport ou si elle est le fichier de Jasper: <textField isBlankWhenNull="true">.

Puis j'ai trouvé de deux façons pour résoudre ce problème. Choisissez une façon décrite ci-dessous.
1. Utiliser la syntaxe d'expression comme ce

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

et vous pouvez utiliser le code

$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. Utiliser la syntaxe d'expression comme

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

et vous pouvez utiliser code comme

$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 vous travaillez dans softReports de ecliple + jaspe vous simplement en friche étapes ci-dessous champ 1.select + rightclick et sélectionnez showProperties option 2.click TextField sélectionnez BlankWhenNull 3.Compile et Reconstruire le vérifier.

0

i ont affaire similaire que je veux éviter de montrer nulle dans la sortie si j'ai paramètre null
i utilise T($P{city}) dans l'éditeur d'expression, il est évaluée à la chaîne vide si vous n'avez pas passé paramètre à ce

T() retourner la chaîne de texte si la valeur est une chaîne, sinon une chaîne vide est renvoyée

Exemple d'utilisation:

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

si je passe paramètre à $ P {ville}
le résultat est:

abdulkahliq de "Riyad"

si je ne passe pas le paramètre à $ P {ville} le résultat est:

abdulkahliq

Merci et salutations,

0

si vos champs sont des chaînes suffit de cocher la propriété sur (BLANK WHEN NULL). Sinon, utilisez l'opérateur ternaire

si nul imprime autre chose imprimez le champ.

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

Ces deux devraient résoudre le problème.

0

Essayez suivante:

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

Ou Définir des rapports propriété: Lorsque le type manquant de ressources: Type vide

les deux œuvres dans mon cas.

0

Vous pouvez définir la hauteur du champ de texte sur 1, définissez l'indicateur Étirement avec dépassement comme Vrai et Vierge lorsque NULL est vrai. Lorsque la valeur du champ est vide, il ne laissera pas d'espace vide entre les deux.