Comment vérifier si une variable existe dans un modèle FreeMarker?

J’ai un modèle Freemarker qui contient un tas d’espaces réservés pour lesquels des valeurs sont fournies lors du traitement du modèle. Je veux inclure conditionnellement une partie du modèle si la variable userName est fournie, quelque chose comme:

[#if_exists userName] Hi ${userName}, How are you? [/#if_exists] 

Cependant, le manuel FreeMarker semble indiquer que if_exists est obsolète, mais je ne trouve pas d’autre moyen d’y parvenir. Bien sûr, je pourrais simplement fournir une variable booléenne supplémentaire isUserName et l’utiliser comme ceci:

 [#if isUserName] Hi ${userName}, How are you? [/#if] 

Mais s’il existe un moyen de vérifier si userName existe, je peux éviter d’append cette variable supplémentaire.

 [#if userName??] Hi ${userName}, How are you? [/#if] 

Ou avec la syntaxe Freemarker standard:

 <#if userName??> Hi ${userName}, How are you?  

Celui-ci semble être un meilleur ajustement:

 <#if userName?has_content> ... do something  

http://freemarker.sourceforge.net/docs/ref_builtins_expert.html

Je pense aussi que if_exists a été utilisé comme:

 Hi ${userName?if_exists}, How are you? 

qui ne cassera pas si userName est null, le résultat si null serait:

 Hi , How are you? 

if_exists est maintenant obsolète et a été remplacé par l’opérateur par défaut! un péché

 Hi ${userName!}, How are you? 

l’opérateur par défaut prend également en charge une valeur par défaut, telle que:

 Hi ${userName!"John Doe"}, How are you? 

Je pense que beaucoup de personnes veulent pouvoir vérifier si leur variable n’est pas vide aussi bien que si elle existe. Je pense que vérifier l’existence et le vide est une bonne idée dans de nombreux cas, et rend votre modèle plus robuste et moins sujet aux erreurs idiotes. En d’autres termes, si vous vérifiez que votre variable n’est pas nulle et qu’elle n’est pas vide avant de l’utiliser, votre modèle devient plus flexible, car vous pouvez y insérer soit une variable nulle, soit une chaîne vide. dans tous les cas.

 <#if p?? && p?has_content>1 

Disons que vous voulez vous assurer que p est plus qu’un simple espace. Ensuite, vous pouvez le couper avant de vérifier s’il has_content .

 <#if p?? && p?trim?has_content>1 

METTRE À JOUR

S’il vous plaît ignorer ma suggestion – has_content est tout ce qui est nécessaire, car il fait une vérification null avec le contrôle vide. Faire p?? && p?has_content p?? && p?has_content est équivalent à p?has_content , vous pouvez donc aussi bien utiliser has_content .

Pour les versions antérieures à FreeMarker 2.3.7

Vous ne pouvez pas utiliser ?? pour gérer les valeurs manquantes, l’ancienne syntaxe est la suivante:

 <#if userName?exists> Hi ${userName}, How are you?