2010-07-14 1 views
2

J'ai un modèle assez simple dont j'ai besoin pour faire un appel de méthode. Cependant, NVelocity ne semble pas évaluer les paramètres de méthode qui sont eux-mêmes NVelocity variables. Prenez le modèle NVelocity suivant:Syntaxe de NVelocity pour appeler des méthodes avec des paramètres évalués

#if (--- CONDITION SNIPPED ---) 
    <blockquote class="column span-4"> 
      I MADE IT! 
    </blockquote> 
#else 
    <blockquote class="column span-4"> 
     $extensionMethods.TestMethod(${var1}) 
</blockquote>  
#end 

Dans le modèle ci-dessus, $extensionMethods est passé en tant qu'instance d'une classe et fonctionne à merveille lors du passage en nombre évalué (par exemple $extensionMethods.TestMethod(4) fonctionne à chaque fois). Toutefois, l'utilisation de $var1 provoque le retour de la chaîne entière telle quelle: $extensionMethods.TestMethod(${var1}).

Existe-t-il un moyen de transmettre une variable à une méthode paresseusement pour que le modèle ci-dessus soit correctement évalué?

Répondre

3

Si vous rencontrez des problèmes, cela peut être lié à vos types de variables ou à la disponibilité de la méthode. Je l'ai construit et testé les éléments suivants:

public class TestClass 
{ 
    #region Methods 
    public string DoSomething(string name) 
    { 
     return name.ToUpperInvariant(); 
    } 

    public string DoSomethingElse(int age) 
    { 
     return (age*10).ToString(); 
    } 
    #endregion 
} 

Et mon modèle:

#set($myVar = "matt") 
#set($myVar2 = 10) 

Name: $test.DoSomething(${myVar}) 
Age: $test.DoSomethingElse(${myVar2}) 

Et la sortie:

Name: "MATT" 
Age: 100 

Peut-on voir le code pour vos méthodes d'extension?

+0

Merci Matthew, j'ai passé un peu plus de temps à bricoler le code et je me suis rendu compte que l'exemple que j'ai donné ci-dessus est trop simplifié. J'ai réussi à corriger le code, mais je crois toujours qu'il y a un bug dans NVelocity. Je vais expliquer dans un post ci-dessous. –

Questions connexes