You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by cb...@apache.org on 2008/11/25 14:19:31 UTC
svn commit: r720489 -
/velocity/engine/trunk/xdocs/docs/translations/user-guide_fr.xml
Author: cbrisson
Date: Tue Nov 25 05:19:30 2008
New Revision: 720489
URL: http://svn.apache.org/viewvc?rev=720489&view=rev
Log:
updated french translation
Modified:
velocity/engine/trunk/xdocs/docs/translations/user-guide_fr.xml
Modified: velocity/engine/trunk/xdocs/docs/translations/user-guide_fr.xml
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/xdocs/docs/translations/user-guide_fr.xml?rev=720489&r1=720488&r2=720489&view=diff
==============================================================================
--- velocity/engine/trunk/xdocs/docs/translations/user-guide_fr.xml (original)
+++ velocity/engine/trunk/xdocs/docs/translations/user-guide_fr.xml Tue Nov 25 05:19:30 2008
@@ -24,6 +24,7 @@
<author email="jvanzyl@zenplex.com">Velocity Documentation Team</author>
<author email="jcastura@kw.igs.net">John Castura</author>
<author email="jean-francois.elfouly@wanadoo.fr">Jean-François El Fouly</author>
+ <author email="cbrisson@apache.org">Claude Brisson</author>
</properties>
<body>
@@ -45,16 +46,13 @@
<li><a href="#Variables">Variables</a></li>
<li><a href="#Propriétés">Propriétés</a></li>
<li><a href="#Méthodes">Méthodes</a></li>
+ <li><a href="#Recherche">Règles de recherche des méthodes</a></li>
+ <li><a href="#Rendu">Rendu</a></li>
</ol>
</li>
-<li><a href="#Notationformelledesréférences">Notation formelle des références</a></li>
-<li><a href="#Notationsilencieusedesréférences">Notation silencieuse des références</a></li>
-<li><a href="#Sortielittérale">Sortie littérale</a>
- <ol>
- <li><a href="#Devise">Devise</a></li>
- <li><a href="#EchapperdesréférencesVTLvalides">Echapper des références VTL valides</a></li>
- </ol>
-</li>
+<li><a href="#Notationformelledesréférences">Références formelles</a></li>
+<li><a href="#Notationsilencieusedesréférences">Références silencieuses</a></li>
+<li><a href="#Modedenotationstrictedesréférences">Mode de notation stricte des références</a></li>
<li><a href="#Substitutiondecas">Substitution de cas</a></li>
<li><a href="#Directives">Directives</a>
<ol>
@@ -69,10 +67,19 @@
<li><a href="#Include">Include</a></li>
<li><a href="#Parse">Parse</a></li>
<li><a href="#Stop">Stop</a></li>
+ <li><a href="#Evaluate">Evaluate</a></li>
+ <li><a href="#Define">Define</a></li>
<li><a href="#Velocimacros">Velocimacros</a></li>
</ol>
</li>
-<li><a href="#EchappementdesdirectivesVTL">Echappement des directives VTL</a></li>
+<li><a href="#Sortielittérale">Sortie littérale</a>
+ <ol>
+ <li><a href="#Devise">Devise</a></li>
+ <li><a href="#EchapperdesréférencesVTLvalides">Echapper des références VTL valides</a></li>
+ <li><a href="#EchapperdesréférencesVTLinvalides">Echapper des références VTL invalides</a></li>
+ <li><a href="#EchappementdesdirectivesVTL">Echappement des directives VTL</a></li>
+ </ol>
+</li>
<li><a href="#VTL:Questionsdeformat">VTL: Questions de format</a></li>
<li><a href="#Autrescaractéristiquesetsujetsdivers">Autres caractéristiques et sujets divers</a>
<ol>
@@ -95,7 +102,7 @@
dynamique dans des sites web, mais tous les exemples du VTL pourraient aussi bien s'appliquer à d'autres pages ou
gabarits.
</p>
- <p>Merci de choisir Velocity!</p>
+ <p>Merci de choisir Velocity !</p>
</section>
<section name="Velocity, qu'est-ce que c'est?" href="Velocity,qu'est-cequec'est?">
@@ -311,7 +318,7 @@
<p>
Prenons le premier exemple, <em>$customer.Address</em>. Cette expression peut avoir deux significations.
Elle peut signifier: "Regarde dans la table de hachage identifiée par <em>customer</em> et renvoie la valeur associée
- à la clé <em>Address</em>. Mais <em>$customer.Address</em> peut aussi faire référence à une méthode (les références
+ à la clé <em>Address</em>". Mais <em>$customer.Address</em> peut aussi faire référence à une méthode (les références
qui désignent des méthodes seront discutées dans la section suivante); <em>$customer.Address</em> pourrait être
une manière abrégée d'écrire <em>$customer.getAddress()</em>. Quand quelqu'un demande votre page, Velocity va
déterminer laquelle de ces deux possibilités a un sens, et retournera la valeur appropriée.
@@ -365,6 +372,47 @@
$book.setTitle( "Homage to Catalonia" )
## On ne peut pas passer une liste de paramètres
]]></source>
+ <p>Depuis Velocity 1.6, toutes les références à des tableaux sont "magiquement" considérées comme des listes de taille fixe.
+ Cela signifie que vous pouvez appeler les méthodes de java.util.List sur les références contenant des tableaux. Ainsi, si vous
+ avez une référence sur un tableau (mettons que celui-ci soit un tableau de String avec trois valeurs), vous pouvez écrire :</p>
+ <source><![CDATA[
+$myarray.isEmpty()
+
+$myarray.size()
+
+$myarray.get(2)
+
+$myarray.set(1, 'test')
+]]></source>
+ <p>Autre nouveauté de Velocity 1.6, la reconnaissance des méthodes à nombre variable d'arguments. Une méthode telle que
+ <em>public void setPlanets(String... planets)</em> ou même simplement <em>public void setPlanets(String[] planets)</em>
+ (si vous utilisez une version de Java antérieure au JDK5) peut maintenant accepter un nombre variable d'arguments
+ quand elle est appelée depuis un gabarit.
+ </p>
+ <p><a name="Recherche"><strong>Règles de recherche des méthodes</strong></a>
+ <br/>Comme mentionné plus haut, les propriétés font souvent référence à des méthodes de l'objet parent. Velocity est relativement
+ malin quand il s'agit de déterminer à quelle méthode correspond une propriété demandée. Il essaye différentes alternatives
+ basées sur plusieurs conventions de nommage établies. L'ordre exact de recherche dépend de ce que le nom la propriété
+ commence ou non avec une majuscule. Pour des noms en minuscule, comme <em>$customer.address</em>, la séquence de recherche est :
+ <ol>
+ <li>getaddress()</li>
+ <li>getAddress()</li>
+ <li>get("address")</li>
+ <li>isAddress()</li>
+ </ol>
+ Pour des noms de propriété en majuscules, comme <em>$customer.Address</em>, c'est légèrement différent :
+ <ol>
+ <li>getAddress()</li>
+ <li>getaddress()</li>
+ <li>get("Address")</li>
+ <li>isAddress()</li>
+ </ol>
+ </p>
+ <p><a name="Rendu"><strong>Rendu</strong></a>
+ <br/>La valeur finale résultant de toute référence (que ce soit une variable, une propriété ou une méthode) est convertie
+ en objet String quand elle est intégrée à la sortie finale. S'il y a un objet qui représente <em>$foo</em> (tel qu'un objet
+ Integer), alors Velocity appellera sa méthode .toString() pour résoudre l'objet en une chaîne de caractère.
+ </p>
<p>
<a name="Notationformelledesréférences"><strong>Notation formelle des références</strong></a>
<br/>Dans les exemples ci-dessus, nous avons utilisé la notation abrégée pour les références, mais il y a aussi
@@ -428,84 +476,43 @@
]]></source>
</section>
-<section name="Sortie littérale" href="Sortielittérale">
- <p>
- VTL utilise des caractères spéciaux, comme <em>$</em> et <em>#</em> pour accomplir sa tâche; il faut donc prendre
- quelques précautions pour utiliser ces caractères dans vos gabarits. Cette section est consacrée à l'échappement
- du caractère <em>$</em>.
- </p>
- <p>
- <a name="Devise"><strong>Devise</strong></a>
- <br/>Il n'y a pas de problème particulier à écrire "J'ai acheté un sac de 2 kg de patates au marché de la ferme
- pour seulement $2.50!". Comme dit plus haut, un identifiant VTL commence toujours par une lettre, majuscule ou
- minuscule, et donc $2.50 ne serait pas pris par erreur pour une référence.
- </p>
- <p>
- <a name="EchapperdesréférencesVTLvalides"><strong>Echapper des références VTL valides</strong></a>
- <br/>Il peut se produire dans certains cas que Velocity se trouve induit en confusion. <em>Echapper</em> les
- caractères spéciaux est le meilleur moyen de traiter les caractères spéciaux du VTL dans vos gabarits, et ceci se
- fait en utilisant le caractère backslash (<em>\</em>).
- </p>
- <source><![CDATA[
-#set( $email = "foo" )
-$email
-]]></source>
- <p>
- Lorsque Velocity rencontre une référence à <em>$email</em> dans votre gabarit VTL, il cherche dans le contexte la
- valeur correspondante. Ici, la sortie sera <em>foo</em>, parce que <em>$email</em> est défini. Si <em>$email</em>
- n'était pas défini, la sortie serait <em>$email</em>.
- </p>
- <p>
- Supposons que <em>$email</em> soit défini (par exemple, cette référence a la valeur <em>foo</em>)
- et que vous vouliez produire <em>$email</em>. Il y a différentes manières de le faire, mais la plus simple est
- d'utiliser le caractère d'échappement.
- </p>
- <source><![CDATA[
-## La ligne qui suit définit $email dans ce gabarit:
-#set( $email = "foo" )
-$email
-\$email
-\\$email
-\\\$email
-]]></source>
- <p>sera rendu comme:</p>
- <source><![CDATA[
-foo
-$email
-\foo
-\$email
-]]></source>
- <p>
- Notez que le caractère <em>\</em> s'applique au <em>$</em> à partir de la gauche. Cette règle d'application
- Ã partir de la gauche fait que <em>\\\$email</em> est rendu comme <em>\\$email</em>. Comparons maintenant ces examples
- à ce qui se passe lorsque <em>$email</em> n'est pas défini.
- </p>
- <source><![CDATA[
-$email
-\$email
-\\$email
-\\\$email
-]]></source>
- <p>sera rendu comme:</p>
- <source><![CDATA[
-$email
-\$email
-\\$email
-\\\$email
-]]></source>
- <p>
- Remarquez comment Velocity traite les références définies différemment de celles qui n'ont pas été définies.
- Voici par exemple une directive set qui donne à <em>$foo</em> la valeur <em>gibbous</em>.
- </p>
- <source><![CDATA[
-#set( $foo = "gibbous" )
-$moon = $foo
+<section name="Mode de notation stricte des références" href="Modedenotationstrictedesréférences">
+ <p>Velocity 1.6 introduit le concept de références strictes, qui est activé en mettant à <em>true</em> le paramètre
+ de configuration Velocity <em>runtime.references.strict</em>. Dans cette configuration les références doivent
+ être soit placées explicitement dans le contexte, soit définies avec une directive <em>#set</em>, sinon Velocity
+ jettera une exception. Les références qui sont dans le contexte avec une valeur nulle ne produiront pas d'exception.
+ De plus, si une tentative est faite d'appeler une méthode ou une propriété sur un objet contenu dans une référence
+ qui ne définit pas cette méthode ou cette propriété, alors Velocity jettera une exception. Cela reste vrai pour une
+ tentative d'appeler une propriété ou une méthode sur une valeur nulle.
+ </p>
+ <p>Dans les exemples suivants <em>$bar</em> est défini mais pas <em>$foo</em>, et toutes ces expressions jetteront une exception :</p>
+ <source><![CDATA[
+$foo ## Exception
+#set($bar = $foo) ## Exception
+#if($foo == $bar)#end ## Exception
+#foreach($item in $foo)#end ## Exception
+]]></source>
+<p>Les expressions suivantes montrent des exemples pour lesquels Velocity jettera une exception lors d'une tentative d'appel
+à des méthodes ou propriétés qui n'existent pas. Dans ces exemples, <em>$bar</em> contient un objet définissant la propriété <em>foo</em>
+qui renvoie une chaîne de caractères, et la propriété <em>retnull</em> qui renvoie null.</p>
+<source><![CDATA[
+$bar.bogus ## $bar does not provide property bogus, Exception
+$bar.foo.bogus ## $bar.foo does not provide property bogus, Exception
+$bar.retnull.bogus ## cannot call a property on null, Exception
+]]></source>
+<p>En général ce comportement de référence stricte est vrai pour toutes les situations dans lesquelles des références sont utilisées excepté
+dans un cas spécifique à l'intérieure de la directive <em>#if</em>. Si une référence est utilisée à l'intérieur d'une directive <em>#if</em>
+ou <em>#elseif</em> sans méthode ou propriété, et si elle n'est pas en train d'être comparée à une autre valeur, alors les références indéfinies
+sont autorisées. Ce comportement fournit un moyen simple de tester si une réference est définie avant de l'utiliser dans un gabarit. Dans
+l'exemple suivant, ou <em>$foo</em> n'est pas définit, les expressions ne produiront pas d'exceptions:</p>
+<source><![CDATA[
+#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
]]></source>
- <p>
- La sortie sera: <em>$moon = gibbous</em> -- où <em>$moon</em> est rendu littéralement puisqu'il n'est pas défini,
- alors que <em>gibbous</em> est rendu au lieu de <em>$foo</em>.
- </p>
- <p>Il est aussi possible d'échapper les directives VTL; ceci est décrit plus en détail dans la section Directives.</p>
+<p>Une remarque supplémentaire : les références à des macros indéfinies jetteront également une exception.</p>
</section>
<section name="Substitution de cas" href="Substitutiondecas">
@@ -559,6 +566,17 @@
manière créative la sortie d'un code Java -- permet aux concepteurs de vraiment prendre en charge l'apparence et le
contenu du site web.
</p>
+ <p>Les directives commencent toujours par un <em>#</em>. Comme les références, le nom des directives peut être entouré
+ par des accolades <em>{</em> et <em>}</em>. C'est utile quand les directives sont immédiatement suivies par du texte.
+ Par exemple, l'expression suivante produit une erreur :
+ </p>
+<source><![CDATA[
+#if($a==1)true ça va#elsepas question!#end
+]]></source>
+<p>Dans ce cas, il faut utiliser des accolades pour séparer le <em>#else</em> du reste de la ligne :</p>
+<source><![CDATA[
+#if($a==1)true ça va#{else}pas question!#end
+]]></source>
<a name="Set"><strong>#set</strong></a>
<p>
La directive <em>#set</em> s'utilise pour donner une valeur à une référence. Une valeur peut être assignée soit à une
@@ -575,28 +593,34 @@
</p>
<p>
<ul>
- <li>Une référence (variable)</li>
+ <li>Une variable</li>
<li>Une chaîne de caractères littérale</li>
- <li>Une référence (propriété)</li>
- <li>Une référence à une méthode</li>
+ <li>Une propriété</li>
+ <li>Une méthode</li>
<li>Un nombre littéral</li>
- <li>Une ArrayList</li>
+ <li>Une liste</li>
+ <li>Un dictionnaire</li>
</ul>
</p>
<p>Les exemples suivants montrent chacun des types susmentionnés:</p>
<source><![CDATA[
-#set( $monkey = $bill ) ## référence (variable)
+#set( $monkey = $bill ) ## variable
#set( $monkey.Friend = "monica" ) ## chaîne de caractères littérale
-#set( $monkey.Blame = $whitehouse.Leak ) ## référence (propriété)
-#set( $monkey.Plan = $spindoctor.weave($web) ) ## référence à une méthode
+#set( $monkey.Blame = $whitehouse.Leak ) ## propriété
+#set( $monkey.Plan = $spindoctor.weave($web) ) ## méthode
#set( $monkey.Number = 123 ) ## nombre littéral
-#set( $monkey.Say = ["Not", $my, "fault"] ) ## ArrayList
+#set( $monkey.Say = ["Not", $my, "fault"] ) ## liste
+#set( $monkey.Map = {"banana" : "good", "roast beef" : "bad"}) ## dictionnaire
]]></source>
<p>
- NOTE: Dans le dernier exemple, les éléments définis avec l'opérateur [..] sont accessibles en utilisant les méthodes
+ NOTE: Pour l'exemple de la liste, les éléments définis avec l'opérateur <em>[..]</em> sont accessibles en utilisant les méthodes
définies dans la classe ArrayList. Ainsi, par exemple, on peut accéder au premier élément en écrivant
- $monkey.Say.get(0)
+ <em>$monkey.Say.get(0)</em>
</p>
+ <p>De même, pour l'exemple du dictionnaire, les éléments définis avec l'opérateur { } sont accessibles en utilisant
+ les méthodes définies dans la classe Map. Ainsi, par exemple, on peut accéder au premier élément en écrivant
+ <em>$monkey.Map.get("banana")</em> pour retourner la chaîne 'good', ou même <em>$monkey.Map.banana</em> pour retourner
+ la même valeur.</p>
<p>Le membre de droite peut aussi être une expression arithmétique simple:</p>
<source><![CDATA[
#set( $value = $foo + 1 )
@@ -700,6 +724,22 @@
de Velocity. Ce comportement peut être changé en éditant le fichier <code>velocity.properties</code> et en y écrivant
l'entrée: <code>stringliterals.interpolate=false</code>.
</p>
+<p>Ãgalement, la directive <em>#litteral</em> permet au concepteur de gabarits de facilement utiliser de gros morceaux de contenu
+non interprété de code VTL. Ceci peut être particulièrement utile en remplacement de multiples <a href="#EchappementdesdirectivesVTL">échappements de directives</a>.</p>
+<source><![CDATA[
+#literal()
+#foreach ($woogie in $boogie)
+ nothing will happen to $woogie
+#end
+#end
+]]></source>
+<p>Sera rendu comme :</p>
+<source><![CDATA[
+#foreach ($woogie in $boogie)
+ nothing will happen to $woogie
+#end
+]]></source>
+
</section>
<section name="Conditions" href="Conditions">
@@ -813,6 +853,15 @@
<em>référence silencieuse $!foo</em> que nous avons déjà rencontrée et qui représente quelque chose de complètement
différent.
</p>
+ <p>Il y a des versions textes de tous les opérateurs logiques, incluant <em>eq</em> (égal), <em>ne</em> (différent),
+<em>and</em> (et), <em>or</em> (ou), <em>not</em> (négation), <em>gt</em> (strictement plus grand), <em>ge</em> (plus grand
+ou égal), <em>lt</em> (strictement plus petit) et <em>le</em> (plus petit ou égal).</p>
+<p>Une dernière remarque. Quand on souhaite inclure du texte immédiatement après une directive <em>#else</em>, on doit
+utiliser des accolades directement autour de la directive pour la différencier du texte qui suit (toutes les directives
+peuvent être délimitées avec des accolades, même si c'est principalement utile avec <em>#else</em>).</p>
+ <source><![CDATA[
+#if( $foo == $bar )C'est ça !#{else}C'est pas ça!#end
+]]></source>
</section>
<section name="Boucles" href="Boucles">
@@ -856,9 +905,17 @@
#end
</table>
]]></source>
+ <p>Velocity fournit aussi un moyen simple de savoir si l'on est sur la dernière itération d'une boucle :</p>
+<source><![CDATA[
+#foreach( $customer in $customerList )
+ $customer.Name #if( $velocityHasNext ),#end
+#end
+]]></source>
<p>
- Le nom par défaut de la variable/référence du compteur de bouche est spécifié dans le fichier
- <code>velocity.properties</code>. Par défaut le compteur démarre à 1, mais ceci aussi peut être paramétré (à 0 ou 1)
+ Le nom de la référence du compteur de bouche est spécifié dans le fichier
+ <code>velocity.properties</code>, sa valeur par défaut est <em>$velocityCount</em>. De même pour le nom de la
+ référence indiquant si l'on est sur la dernière itération, dont la valeur par défaut est <em>$velocityHasNext</em>.
+ Par défaut le compteur démarre à 1, mais ceci aussi peut être paramétré (à 0 ou 1)
dans le fichier <code>velocity.properties</code>. Voici à quoi ressemble la section Propriétés du compteur de boucle
dans le fichier <code>velocity.properties</code>:
</p>
@@ -866,11 +923,30 @@
# Default name of the loop counter
# variable reference.
directive.foreach.counter.name = velocityCount
+directive.foreach.iterator.name = velocityHasNext
# Default starting value of the loop
# counter variable reference.
directive.foreach.counter.initial.value = 1
]]></source>
+<p>Il est possible de définir le maximum autorisé du nombre de fois qu'une boucle peut être exécutée. Par défaut il
+n'y a pas de maximum (c'est indiqué par la valeur 0 ou moins), mais on peut le fixer à un nombre arbitraire dans le
+fichier <code>velocity.properties</code>. Cela peut être utile comme garde-fou.</p>
+<source><![CDATA[
+# The maximum allowed number of loops.
+directive.foreach.maxloops = -1
+]]></source>
+<p>Si l'on veut arrêter de boucler depuis l'intérieur d'un <em>#foreach</em>, on peut maintenant utiliser la directive
+<em>#break</em> à n'importe quelle itération de la boucle :</p>
+<source><![CDATA[
+## list first 5 customers only
+#foreach( $customer in $customerList )
+ #if( $velocityCount > 5 )
+ #break
+ #end
+ $customer.Name
+#end
+]]></source>
</section>
<section name="Include" href="Include">
@@ -956,6 +1032,30 @@
]]></source>
</section>
+<section name="Evaluate" href="Evaluate">
+<p>La directive <em>#evaluate</em> peut être utilisée pour évaluer dynamiquement du code VTL. Cela permet au gabarit
+d'évaluer une chaîne qui est construite au moment du rendu. Une telle chaîne pourrait être utilisée pour internationaliser
+le gabarit ou pour include des fragments de gabarit depuis une base de donnée.</p>
+<p>L'exemple ci-dessous affiche <em>abs</em></p>
+<source><![CDATA[
+#set($source1 = "abc")
+#set($select = "1")
+#set($dynamicsource = "$source$select")
+## $dynamicsource is now the string '$source1'
+#evaluate($dynamicsource)
+]]></source>
+</section>
+
+<section name="Define" href="Define">
+<p>La directive <em>#define</em> permet d'assigner un bloc de VTL à une référence.</p>
+<p>L'exemple ci-dessous affiche <em>Hello World!</em></p>
+<source><![CDATA[
+#define( $block )Hello $who#end
+#set( $who = 'World!' )
+$block
+]]></source>
+</section>
+
<section name="Velocimacros" href="Velocimacros">
<p>
L'élément de script <em>#macro</em> permet aux concepteurs de définir un segment répétable d'un gabarit VTL.
@@ -1154,7 +1254,106 @@
</p>
</section>
-<section name="Echappement des directives VTL" href="EchappementdesdirectivesVTL">
+<section name="Sortie littérale" href="Sortielittérale">
+ <p>
+ VTL utilise des caractères spéciaux, comme <em>$</em> et <em>#</em> pour accomplir sa tâche; il faut donc prendre
+ quelques précautions pour utiliser ces caractères dans vos gabarits. Cette section est consacrée à l'échappement
+ du caractère <em>$</em>.
+ </p>
+ <p>
+ <a name="Devise"><strong>Devise</strong></a>
+ <br/>Il n'y a pas de problème particulier à écrire "J'ai acheté un sac de 2 kg de patates au marché de la ferme
+ pour seulement $2.50!". Comme dit plus haut, un identifiant VTL commence toujours par une lettre, majuscule ou
+ minuscule, et donc $2.50 ne serait pas pris par erreur pour une référence.
+ </p>
+ <p>
+ <a name="EchapperdesréférencesVTLvalides"><strong>Echapper des références VTL valides</strong></a>
+ <br/>Il peut se produire dans certains cas que Velocity se trouve induit en confusion. <em>Echapper</em> les
+ caractères spéciaux est le meilleur moyen de traiter les caractères spéciaux du VTL dans vos gabarits, et ceci se
+ fait en utilisant le caractère backslash (<em>\</em>).
+ </p>
+ <source><![CDATA[
+#set( $email = "foo" )
+$email
+]]></source>
+ <p>
+ Lorsque Velocity rencontre une référence à <em>$email</em> dans votre gabarit VTL, il cherche dans le contexte la
+ valeur correspondante. Ici, la sortie sera <em>foo</em>, parce que <em>$email</em> est défini. Si <em>$email</em>
+ n'était pas défini, la sortie serait <em>$email</em>.
+ </p>
+ <p>
+ Supposons que <em>$email</em> soit défini (par exemple, cette référence a la valeur <em>foo</em>)
+ et que vous vouliez produire <em>$email</em>. Il y a différentes manières de le faire, mais la plus simple est
+ d'utiliser le caractère d'échappement.
+ </p>
+ <source><![CDATA[
+## La ligne qui suit définit $email dans ce gabarit:
+#set( $email = "foo" )
+$email
+\$email
+\\$email
+\\\$email
+]]></source>
+ <p>sera rendu comme:</p>
+ <source><![CDATA[
+foo
+$email
+\foo
+\$email
+]]></source>
+ <p>
+ Notez que le caractère <em>\</em> s'applique au <em>$</em> à partir de la gauche. Cette règle d'application
+ Ã partir de la gauche fait que <em>\\\$email</em> est rendu comme <em>\\$email</em>. Comparons maintenant ces examples
+ à ce qui se passe lorsque <em>$email</em> n'est pas défini.
+ </p>
+ <source><![CDATA[
+$email
+\$email
+\\$email
+\\\$email
+]]></source>
+ <p>sera rendu comme:</p>
+ <source><![CDATA[
+$email
+\$email
+\\$email
+\\\$email
+]]></source>
+ <p>
+ Remarquez comment Velocity traite les références définies différemment de celles qui n'ont pas été définies.
+ Voici par exemple une directive set qui donne à <em>$foo</em> la valeur <em>gibbous</em>.
+ </p>
+ <source><![CDATA[
+#set( $foo = "gibbous" )
+$moon = $foo
+]]></source>
+ <p>
+ La sortie sera: <em>$moon = gibbous</em> -- où <em>$moon</em> est rendu littéralement puisqu'il n'est pas défini,
+ alors que <em>gibbous</em> est rendu au lieu de <em>$foo</em>.
+ </p>
+ <p>
+ <a name="EchapperdesréférencesVTLvalides"><strong>Echapper des références VTL valides</strong></a>
+ <br/>Velocity a parfois des problèmes à interpréter un gabarit quand il rencontre une "référence invalide" pour du texte
+ dont on n'a jamais souhaité que ce soit une référence. Ãchapper les caractères spéciaux est de nouveau le meilleur moyen
+ de gérer ces situations, mais le caractère <em>\</em> risque de ne pas fonctionner dans ce cas. Au lieu d'essayer de juste
+ échapper le caractère <em>$</em> ou <em>#</em> problématique, il faut probabement simplement remplacer :
+ </p>
+<source><![CDATA[
+${my:invalid:non:reference}
+]]></source>
+<p>Par :</p>
+<source><![CDATA[
+#set( $D = '$' )
+${D}{my:invalid:non:reference}
+]]></source>
+<p>Vous pouvez bien sûr mettre vos chaînes <em>$</em> et <em>#</em> directement dans le contexte depuis votre code Java (i.e.
+<code>context.put("D","$");</code>) pour éviter les directives <em>#set</em> additionnelles dans vos gabarits. Ou, si vous utilisez
+<a href="http://velocity.apache.org/tools/devel/">VelocityTools</a>, vous pouvez tout simplement utiliser l'outil EscapeTool comme suit :</p>
+<source><![CDATA[
+${esc.d}{my:invalid:non:reference}
+]]></source>
+<p><a name="EchappementdesdirectivesVTL">Echappement des directives VTL</a><br/>
+</p>
<p>
Les directives VTL peuvent être échappées avec le caractère barre de fraction inversée ("\"), de la même manière que
les références VTL valides.
@@ -1472,8 +1671,9 @@
#foo( $color )
]]></source>
<strong>Peut-on enregistrer des Velocimacros avec #parse() ?</strong>
+ <p><strong>Oui ! C'est devenu possible avec Velocity 1.6.</strong></p>
<p>
- Pour l'instant, les Velocimacros doivent être définies avant d'être utilisées dans un gabarit.
+ Si vous utilisez un version antérieure, les Velocimacros doivent être définies avant d'être utilisées dans un gabarit.
Ce qui signifie que les déclarations #macro() doivent précéder l'usage des Velocimacros.
</p>
<p>