web-dev-qa-db-fra.com

Velocity: est un moyen quelconque de vérifier si une variable est définie

Je souhaite inclure un modèle nested dans d'autres cont1, cont2, cont3. Et le modèle imbriqué doit masquer un contrôle spécifique pour cont1 uniquement. Avant l'inclusion dans cont1, j'aimerais attribuer une valeur à une variable d'indicateur $hideMyControl

Et à l'intérieur du modèle imbriqué, j'aimerais vérifier si la valeur attribuée à $hideMyControl est affectée.

Comment effectuer une telle vérification?

29
sergtk

Vous pouvez le faire en utilisant

  #if($!{$articleLeader})
      // Perform your operation or the template part you want to show.
  #end

Pour plus d'informations, reportez-vous à la section "Référence formelle" du Manuel de référence Apache Velocity .

16
sagar27
#if($hideMyControl)
    // your code
#end

Si $ hideMyControl est défini, votre code sera exécuté

32
onlinehood
#if($!{hideMyControl} != "")
## do something if $hideMyControl is defined
#end

Cela fonctionne pour moi dans les modèles de mappage de corps AWS API Gateway. Veuillez consulter Notet Reference Notation dans le Guide de l'utilisateur Velocity pour plus d'informations.

5
erabbit

J'utilisais

#if ($hideMyControl) 
    //do something 
#end 

depuis quelques mois, mais aujourd'hui, il ne fonctionne plus.

Je suis venu ici pour trouver de l'aide et j'ai remarqué une nouvelle façon de l'écrire: 

#if($!{$hideMyControl})
   // do something
#end

ce code fonctionne!

1

Pour vérifier si $ hideMyControl est dans le contexte Velocity et que IS NOT boolean est la valeur 'true' (ou 'false' également):

#if ($hideMyControl && $hideMyControl != true)
    ##do stuff
#end

Bien sûr, si vous utilisez réellement votre variable $ hideMyControl en tant que type booléen, vous n'avez pas besoin de la deuxième partie de la condition.

0
user07

Selon les docs de Strict Reference Mode , il est possible de vérifier plusieurs constructions pour déterminer si une variable est définie.

#if ($foo)#end                  ## False
#if ( ! $foo)#end               ## True
#if ($foo && $foo.bar)#end      ## False and $foo.bar will not be evaluated
#if ($foo && $foo == "bar")#end ## False and $foo == "bar" wil not be evaluated
#if ($foo1 || $foo2)#end        ## False $foo1 and $foo2 are not defined

Donc, ce code fonctionne dans mon cas. 

#if( !$value )
  // Perform your operation or the template part you want to show.
#end
0
Roman Kotov