web-dev-qa-db-fra.com

Velocity, quel est le moyen le plus efficace de vérifier si une chaîne est vide et non nulle

J'ai souvent des cas où une valeur de chaîne est absente et/ou vide. Est-ce la meilleure façon de tester cette condition?

#if( $incentive.disclaimer && $!incentive.disclaimer != '' ) 
   $incentive.disclaimer 
#end
27
rsturim

Si vous voulez simplement que Velocity affiche la valeur s'il y en a, ou n'affiche rien s'il est absent, un référence silencieuse suffira à lui seul:

$!incentive.disclaimer

Si vous voulez tester explicitement le vide, StringUtils from Apache Commons Lang peut vous aider. Ajoutez-le d'abord à votre contexte (référence ici ):

context.put("StringUtils", StringUtils.class);

Bien que si vous utilisez une ancienne version de Velocity, elle n'aimera peut-être pas la référence de classe, vous pouvez donc ajouter une instance à la place:

context.put("StringUtils", new StringUtils());

Ensuite, vous pouvez appeler sa méthode isEmpty à partir de votre modèle Velocity:

#if($StringUtils.isEmpty($incentive.disclaimer))
    ## logic here...
#end

Si vous voulez que les espaces soient traités comme vides, il y a aussi isBlank .

36
Evan Haas

Pour les cas où simplement $!incentive.disclaimer ne convient pas http://wiki.Apache.org/velocity/CheckingForNull suggère une solution courte:

#if( "$!car.fuel" != "" )
32
Vadzim

Vous voulez une notation de référence silencieuse: $! Incentive.disclaimer

Bla bla $!incentive.disclaimer. 

Si $ incentive.disclaimer est null ou "" , Velocity rendra:

Bla bla .

Reportez-vous à la section Guide officielle: https://velocity.Apache.org/engine/devel/user-guide.html#quiet-reference-notation

Parfois, vous avez besoin de #if

Cas le plus courant lorsque vous voulez #if: votre variable n'est qu'une partie d'un plus gros morceau de texte et vous ne voulez pas l'afficher si la variable est vide. Ensuite, vous en avez besoin:

#if($incentive.disclaimer && !$incentive.disclaimer.empty) 
    Please read our incentive disclaimer:
    $incentive.disclaimer
#end
15
DenisS