J'ai un champ dans mon rapport jasper qui a une valeur d'expression comme
$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, j'obtiens la valeur nulle entre autres choses comme
101 Main St****null****ILUnited States12345
Notez le null en surbrillance. Y a-t-il un moyen d'éviter cela?
J'ai essayé de vérifier la valeur null d'un champ particulier en utilisant l'expression booléenne et de le remplacer par un blanc, mais cela ne semble pas fonctionner.
Définissez la propriété isBlankWhenNull
sur true.
<textField isBlankWhenNull="true">
Dans l'expression, vous êtes autorisé à utiliser le code Java.
Donc, ce que vous devez faire est de vérifier que la valeur du champ est null si elle est ensuite remplacée 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}
@Vash, oui c'est ce que je ferais sauf que je pense que vous voudrez peut-être mettre chaque expression entre parenthèses afin que chaque expression soit indépendante des autres. Comme ç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})
si vous pouvez utiliser jasperreports-functions et que vous voulez afficher une valeur de chaîne, vous pouvez le faire avec la fonction T() qui renvoie le texte String ou la chaîne vide.
T($F{firstName})
($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})
J'ai l'option (vide quand Null) vérifiée pour chaque champ du rapport et voir toujours les nulls. J'ai donc utilisé des expressions de rapport.
Puisque chaque variable de rapport est une chaîne, pour vérifier l’utilisation nulle:
$F{address_stree2}.equals("null")
Vous pouvez définir la hauteur du champ de texte sur 1, Définir l'indicateur Étirer avec dépassement sur true et sur Vierge lorsque NULL est défini sur true. Ainsi, lorsque la valeur du champ est vide, elle ne laissera pas d'espace vide.
Essayez de suivre:
$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}
Or Définir la propriété des rapports: Type de ressource manquant: Type vide
les deux fonctionnent dans mon cas.
Si vous travaillez dans ecliple + jasper softReports, vous passez sous les étapes1.sélectionnez un champ + clic droit et sélectionnezshowPropertiesoption2.click TextField sélectionnez 3.Compile et Rebuild vérifie-le.
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})
Définissez la propriété "Est vide quand null" sur true
Cordialement,
Ankush
si vos champs sont des chaînes, cochez simplement la propriété sur (BLANK WHEN NULL). Sinon, utilisez l'opérateur ternaire
si null, imprimer quelque chose d'autre, imprimer le champ.
field==null?whatever:field
field=null?false:true
Ces deux devraient résoudre le problème.
j'ai un cas similaire que je veux éviter de montrer null dans la sortie si j'ai un paramètre null
J'utilise T($P{city})
dans l'éditeur d'expression, il est évalué à empty string si vous ne lui avez pas passé de paramètre
T() retourne la chaîne de texte si la valeur est une chaîne, sinon un .__ vide. la chaîne est retournée
exemple d'utilisation:
$P{name} + " " + (T($P{city}).isEmpty() ? "" : " from " )+ (T($P{city}).isEmpty() ? "" : "\"" + T($P{city}) + "\"")
si je passe le 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,