<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tutorial do NVelocity &#8211; FoxDevelop</title>
	<atom:link href="https://www.foxdevelop.com/pt-pt/category/c-pt-pt/bliblioteca-do-c/tutorial-do-nvelocity/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.foxdevelop.com</link>
	<description>Estúdio Independente de Desenvolvimento de Software</description>
	<lastBuildDate>Fri, 14 Aug 2026 03:51:41 +0000</lastBuildDate>
	<language>pt-PT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.4</generator>

<image>
	<url>https://www.foxdevelop.com/wp-content/uploads/2026/05/fox-svgrepo-com-1.png</url>
	<title>Tutorial do NVelocity &#8211; FoxDevelop</title>
	<link>https://www.foxdevelop.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Caracteres de escape e condicionais if</title>
		<link>https://www.foxdevelop.com/pt-pt/2026/08/14/caracteres-de-escape-e-condicionais-if/</link>
					<comments>https://www.foxdevelop.com/pt-pt/2026/08/14/caracteres-de-escape-e-condicionais-if/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 03:51:40 +0000</pubDate>
				<category><![CDATA[Tutorial do NVelocity]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8538</guid>

					<description><![CDATA[Caractere de escape barra invertida + sintaxe de condição #if 1. Regras de escape com barra invertida \ Variável pré‑definida：#set($dog = "woof woof") Código VTL Saída renderizada Explicação $dog woof ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Caractere de escape barra invertida + sintaxe de condição #if</p>



<h4 class="wp-block-heading">1. Regras de escape com barra invertida \</h4>



<p class="wp-block-paragraph">Variável pré‑definida：<code>#set($dog = "woof woof")</code></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Código VTL</th><th>Saída renderizada</th><th>Explicação</th></tr></thead><tbody><tr><td><code>$dog</code></td><td>woof woof</td><td>Resolução normal da variável</td></tr><tr><td><code>\$dog</code></td><td>$dog</td><td><strong>Uma única barra invertida</strong>：escapa o caractere <code>$</code> seguinte, desativa a interpretação da variável e imprime <code>$</code> literalmente</td></tr><tr><td><code>\\$dog</code></td><td>\woof woof</td><td>A primeira <code>\</code> escapa a segunda <code>\</code> → exibe <code>\</code>；<br>o restante <code>$dog</code> é interpretado normalmente</td></tr><tr><td><code>\\\$dog</code></td><td>\$dog</td><td><code>\\</code> exibe <code>\</code>, <code>\$</code> exibe <code>$</code></td></tr><tr><td><code>\\\\$dog</code></td><td>\woof woof</td><td><code>\\</code> exibe <code>\</code>, <code>\\</code> exibe <code>\</code>；<br><code>$dog</code> resolve a variável</td></tr></tbody></table></figure>



<ol class="wp-block-list">
<li>Nomes de variáveis Velocity<strong>precisam começar com letra</strong>. <code>$10.0</code> não é reconhecido como variável e é exibido como está. Sendo assim, textos como <code>Microsoft $10,0 USD</code> não precisam de escape extra；</li>



<li><strong>Barras invertidas consecutivas se anulam aos pares</strong>；apenas a combinação <code>\$</code> consegue escapar o símbolo cifrão；</li>



<li>Para exibir <code>$nomeVariavel</code> de forma literal na página, sintaxe padrão：<code>\$dog</code>.</li>
</ol>



<h4 class="wp-block-heading">2. Sintaxe de ramificação condicional #if</h4>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">#set($ages = 22)</span>
<span class="hljs-comment">#if ($ages &lt;13)</span>
    &lt;h1&gt;Você é uma criança&lt;/h1&gt;
<span class="hljs-comment">#elseif ($ages &lt;18)</span>
    &lt;h1&gt;Você é um adolescente&lt;/h1&gt;
<span class="hljs-comment">#elseif ($ages &lt;35)</span>
    &lt;h1&gt;Você é um jovem adulto&lt;/h1&gt;
<span class="hljs-comment">#elseif ($ages &lt;60)</span>
    &lt;h1&gt;Você é uma pessoa de meia‑idade&lt;/h1&gt;
<span class="hljs-comment">#else</span>
    &lt;h1&gt;Você é idoso&lt;/h1&gt;
<span class="hljs-comment">#end</span></code></span></pre>


<h5 class="wp-block-heading">Resultado da execução</h5>



<p class="wp-block-paragraph"><code>$ages=22</code>, satisfaz <code>22 &lt; 35</code> → saída：<code>&lt;h1&gt;Você é um jovem adulto&lt;/h1&gt;</code></p>



<h5 class="wp-block-heading">Observações</h5>



<ol class="wp-block-list">
<li>É<strong>obrigatório fechar o bloco com <code>#end</code></strong>；sem ele ocorre erro de análise；</li>



<li>Palavra‑chave：<code>#elseif</code>（<strong>não escreva #else if com espaço</strong>, essa sintaxe é inválida）；</li>



<li>Operadores suportados：<code>&lt; > &lt;= >= == != &amp;&amp; ||</code> entre outros；</li>



<li>Avaliação de cima para baixo. Quando uma condição for atendida, os ramos seguintes não são executados.</li>
</ol>



<p class="wp-block-paragraph">Caracteres de escape e condicionais if</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/pt-pt/2026/08/14/caracteres-de-escape-e-condicionais-if/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Métodos de extensão</title>
		<link>https://www.foxdevelop.com/pt-pt/2026/08/14/metodos-de-extensao/</link>
					<comments>https://www.foxdevelop.com/pt-pt/2026/08/14/metodos-de-extensao/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 03:47:24 +0000</pubDate>
				<category><![CDATA[Tutorial do NVelocity]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8522</guid>

					<description><![CDATA[I‑Código da entidade Person no back‑end (C#) Definir variáveis de objeto no código back‑end cs II‑Código do modelo VTL &#38; instruções de renderização 1. $pTest.getMyName() ✅ No Velocity, ao chamar ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">I‑Código da entidade Person no back‑end (C#)</h4>


<pre class="wp-block-code"><span><code class="hljs language-cs"><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">Person</span>
{
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">string</span> name;
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">string</span> Name
    {
        <span class="hljs-keyword">get</span> { <span class="hljs-keyword">return</span> name; }
        <span class="hljs-keyword">set</span> { name = <span class="hljs-keyword">value</span>; }
    }
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> age;
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">int</span> Age
    {
        <span class="hljs-keyword">get</span> { <span class="hljs-keyword">return</span> age; }
        <span class="hljs-keyword">set</span> { age = <span class="hljs-keyword">value</span>; }
    }

    <span class="hljs-comment">//Construtor sem parâmetros</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">Person</span>(<span class="hljs-params"></span>)</span>{}
    <span class="hljs-comment">//Construtor com parâmetros</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">Person</span>(<span class="hljs-params"><span class="hljs-keyword">string</span> name, <span class="hljs-keyword">int</span> age</span>)</span>
    {
        <span class="hljs-keyword">this</span>.name = name;
        <span class="hljs-keyword">this</span>.age = age;
    }

    <span class="hljs-comment">//Método de instância sem parâmetros</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">string</span> <span class="hljs-title">getMyName</span>(<span class="hljs-params"></span>)</span>
    {
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>.name;
    }

    <span class="hljs-comment">//Método de instância com múltiplos parâmetros</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">string</span> <span class="hljs-title">JoinStr</span>(<span class="hljs-params"><span class="hljs-keyword">string</span> str1, <span class="hljs-keyword">string</span> str2</span>)</span>
    {
        <span class="hljs-keyword">return</span> str1 + str2;
    }
}</code></span></pre>


<p class="wp-block-paragraph">Definir variáveis de objeto no código back‑end cs</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">Person pTest = <span class="hljs-keyword">new</span> Person(<span class="hljs-string">"Tom"</span>, <span class="hljs-number">22</span>);
context.Put(<span class="hljs-string">"pTest"</span>, pTest);</code></span></pre>


<h4 class="wp-block-heading">II‑Código do modelo VTL &amp; instruções de renderização</h4>


<pre class="wp-block-code"><span><code class="hljs language-php">Chamada de método&lt;br /&gt;
$pTest.getMyName();

<span class="hljs-comment">#set($a = "hello")</span>
<span class="hljs-comment">#set($b = "foxdevelop")</span>

$pTest.JoinStr($a, $b);</code></span></pre>


<h5 class="wp-block-heading">1. <code>$pTest.getMyName()</code></h5>



<ul class="wp-block-list">
<li>Invoca o <strong>método sem parâmetros</strong> do objeto <code>getMyName()</code></li>



<li>Retorna <code>Tom</code></li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> No Velocity, ao chamar método sem parâmetros os parênteses <code>()</code> podem ser omitidos. <code>$pTest.getMyName</code> é equivalente a <code>$pTest.getMyName()</code></p>
</blockquote>



<h5 class="wp-block-heading">2. <code>$pTest.JoinStr($a, $b)</code></h5>



<ul class="wp-block-list">
<li>Chama o método que recebe dois parâmetros do tipo string</li>



<li>O VTL primeiro interpreta <code>$a</code> e <code>$b</code>, passando os valores reais <code>"hello"</code> e <code>"foxdevelop"</code></li>



<li>Retorna o resultado da concatenação: <code>hellofoxdevelop</code></li>
</ul>



<h4 class="wp-block-heading">Resumo</h4>



<ol class="wp-block-list">
<li><strong>Diferença entre maiúsculas e minúsculas no nome do método é obrigatória</strong><br>No C#, <code>getMyName()</code> ≠ <code>GetMyName()</code>; o modelo deve seguir exatamente a escrita do código.</li>



<li><strong>Passe variáveis diretamente nos parâmetros</strong><br>Não use aspas extras. <code>$pTest.JoinStr($a,$b)</code> está correto; evite escrever <code>$pTest.JoinStr("$a","$b")</code> (isso enviará o texto literal &#8220;$a&#8221;).</li>



<li><strong>Diferenciar propriedades de métodos</strong></li>
</ol>



<ul class="wp-block-list">
<li><code>$pTest.Name</code> → acessa uma propriedade (getter)</li>



<li><code>$pTest.getMyName()</code> → invoca um método</li>
</ul>



<ol class="wp-block-list">
<li><strong>Valor de retorno é exibido automaticamente</strong><br>Ao escrever diretamente <code>$objeto.metodo()</code> no modelo, o Velocity imprime automaticamente o valor retornado. Se não quiser exibir o resultado, use <code>#set</code> para recebê‑lo:</li>
</ol>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">#set($result = $pTest.JoinStr($a,$b))</span></code></span></pre>


<h4 class="wp-block-heading">III‑Saída renderizada da página final</h4>


<pre class="wp-block-code"><span><code class="hljs">Chamada de método
Tom;

hellofoxdevelop;</code></span></pre>


<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Métodos de extensão</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/pt-pt/2026/08/14/metodos-de-extensao/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Observações complementares sobre limites de variável</title>
		<link>https://www.foxdevelop.com/pt-pt/2026/08/14/observacoes-complementares-sobre-limites-de-variavel/</link>
					<comments>https://www.foxdevelop.com/pt-pt/2026/08/14/observacoes-complementares-sobre-limites-de-variavel/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 03:34:23 +0000</pubDate>
				<category><![CDATA[Tutorial do NVelocity]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8506</guid>

					<description><![CDATA[Pré‑definição de variável: #set ($valok = "hello foxdevelop") Diferenciação entre limite de variável ${} e acesso com . Código Resultado renderizado Explicação do funcionamento $valok hello foxdevelop Saída básica da ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Pré‑definição de variável: <code>#set ($valok = "hello foxdevelop")</code></p>



<h4 class="wp-block-heading">Diferenciação entre limite de variável <code>${}</code> e acesso com <code>.</code></h4>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Código</th><th>Resultado renderizado</th><th>Explicação do funcionamento</th></tr></thead><tbody><tr><td><code>$valok</code></td><td>hello <code>foxdevelop</code></td><td>Saída básica da variável</td></tr><tr><td><code>$valok.</code>com</td><td>hello <code>foxdevelop</code>.com</td><td>Velocity tenta invocar o atributo ou método <code>cn</code> do objeto <code>valok</code>; a string não possui o método <code>cn</code>, <strong>a variável e o sufixo são exibidos exatamente como escritos</strong></td></tr><tr><td><code>${valok}.com</code></td><td>hello <code>foxdevelop</code>.com</td><td><code>{}</code> define o limite da variável. Após renderizar <code>valok</code>, o texto <code>.com</code> é concatenado (forma recomendada para concatenação)</td></tr><tr><td><code>$!valok.com</code></td><td>hello<code>foxdevelop</code>.com</td><td><code>$!</code> referência silenciosa: se a variável existir, funciona igual a <code>$valok</code>; se não existir, retorna uma string vazia, não exibe o texto bruto <code>$xxx</code></td></tr><tr><td><code>${valok.com}</code></td><td><strong>vazio</strong></td><td>Tenta ler o atributo <code>valok.com</code>. A string não tem método ou atributo <code>com</code>, a variável não existe. Use <code>$!{valok.com}</code> para obter saída vazia.</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><br><code>${valok}.cn</code> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Concatenação de variável com sufixo<br><code>${valok.cn}</code> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Acessa o atributo cn pertencente ao objeto valok</p>



<h4 class="wp-block-heading">Aspas simples / aspas duplas &amp; junção de variáveis com texto</h4>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Código</th><th>Resultado renderizado</th><th>Explicação do funcionamento</th></tr></thead><tbody><tr><td><code>what$valok</code></td><td>whathello <code>foxdevelop</code></td><td>Concatenação direta, o Velocity identifica automaticamente o limite da variável</td></tr><tr><td><code>what$"valok"</code></td><td>what$&#8221;valok&#8221;</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Sintaxe incorreta. Não é permitido colocar aspas logo após <code>$</code>, a variável não será interpretada</td></tr><tr><td><code>what"$valok"</code></td><td>what&#8221;hello <code>foxdevelop</code>&#8220;</td><td>As aspas são apenas caracteres comuns. Dentro do template elas não disparam análise de string, a variável é processada normalmente</td></tr><tr><td><code>what'$valok'</code></td><td>what&#8217;hello <code>foxdevelop</code>&#8216;</td><td>Mesmo caso acima, aspas simples são caracteres literais comuns</td></tr><tr><td><code>$valokwhat</code></td><td>$valokwhat</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Variável não reconhecida! O Velocity interpreta todo <code>valokwhat</code> como nome da variável. Se não encontrar, exibe o texto original</td></tr><tr><td><code>${valok}what</code></td><td>hello <code>foxdevelop</code>what</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> As chaves delimitam a variável, resolve completamente o problema de variável grudada ao texto</td></tr></tbody></table></figure>



<h4 class="wp-block-heading">Resumo</h4>



<ol class="wp-block-list">
<li><strong>Sempre utilize <code>${nomeDaVariavel}</code> quando a variável for unida a outro texto</strong><br>Errado: <code>$valokwhat</code>; Correto: <code>${valok}what</code></li>



<li><strong>Para concatenar sufixos de texto: use <code>${valok}.cn</code>, não escreva <code>${valok.cn}</code></strong></li>



<li><strong><code>$!nomeDaVariavel</code> referência silenciosa</strong>: retorna valor vazio se a variável não existir, não imprime o texto bruto <code>$xxx</code></li>



<li><strong>Aspas simples e duplas dentro do HTML do template são apenas caracteres comuns</strong>; <strong>somente dentro da atribuição #set</strong> existe diferença: aspas simples (não interpreta variáveis), aspas duplas (interpreta variáveis)</li>
</ol>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">#set($a = "$valok") // Aspas duplas: interpreta variável, a=hello bamn</span>
<span class="hljs-comment">#set($a = '$valok') // Aspas simples: não interpreta variável, a=$valok</span></code></span></pre>


<p class="wp-block-paragraph">Observações complementares sobre limites de variável</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/pt-pt/2026/08/14/observacoes-complementares-sobre-limites-de-variavel/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Iterar coleções</title>
		<link>https://www.foxdevelop.com/pt-pt/2026/08/14/iterar-colecoes/</link>
					<comments>https://www.foxdevelop.com/pt-pt/2026/08/14/iterar-colecoes/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 03:22:05 +0000</pubDate>
				<category><![CDATA[Tutorial do NVelocity]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8490</guid>

					<description><![CDATA[Velocity #foreach — Iterar coleções &#38; objetos 1. Iterar uma lista de strings Código backend C# Código do template Velocity Resultado da execução: percorre cada texto da lista e exibe ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Velocity #foreach — Iterar coleções &amp; objetos</p>



<h4 class="wp-block-heading">1. Iterar uma lista de strings</h4>



<h5 class="wp-block-heading">Código backend C#</h5>


<pre class="wp-block-code"><span><code class="hljs language-cs">List&lt;<span class="hljs-keyword">string</span>&gt; strList = <span class="hljs-keyword">new</span> List&lt;<span class="hljs-keyword">string</span>&gt;() {<span class="hljs-string">"dsd"</span>,<span class="hljs-string">"sdfsd"</span>,<span class="hljs-string">"asdfsd"</span>,<span class="hljs-string">"asdfsdfsd"</span>};
context.Put(<span class="hljs-string">"strList"</span>, strList);</code></span></pre>


<h5 class="wp-block-heading">Código do template Velocity</h5>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">#foreach($str in $strList)</span>
    $str &lt;br/&gt;
<span class="hljs-comment">#end</span></code></span></pre>


<p class="wp-block-paragraph">Resultado da execução: percorre cada texto da lista e exibe com quebra de linha.</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="406" height="184" src="https://www.foxdevelop.com/wp-content/uploads/2026/08/image-16.png" alt="" class="wp-image-7102" srcset="https://www.foxdevelop.com/wp-content/uploads/2026/08/image-16.png 406w, https://www.foxdevelop.com/wp-content/uploads/2026/08/image-16-300x136.png 300w" sizes="(max-width: 406px) 100vw, 406px" /></figure>



<h5 class="wp-block-heading">Explicação da sintaxe</h5>



<p class="wp-block-paragraph"><code>#foreach(variavelLoop in coleção)</code> inicia o laço, <code>#end</code> fecha o laço.</p>



<h4 class="wp-block-heading">2. Iterar lista de classes de entidade personalizadas</h4>



<h5 class="wp-block-heading">1. Entidade Person (C#)</h5>


<pre class="wp-block-code"><span><code class="hljs language-cs"><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">Person</span>
{
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">string</span> name;
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">string</span> Name
    {
        <span class="hljs-keyword">get</span> { <span class="hljs-keyword">return</span> name; }
        <span class="hljs-keyword">set</span> { name = <span class="hljs-keyword">value</span>; }
    }
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> age;
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">int</span> Age
    {
        <span class="hljs-keyword">get</span> { <span class="hljs-keyword">return</span> age; }
        <span class="hljs-keyword">set</span> { age = <span class="hljs-keyword">value</span>; }
    }
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">Person</span>(<span class="hljs-params"></span>)</span>{}
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">Person</span>(<span class="hljs-params"><span class="hljs-keyword">string</span> name,<span class="hljs-keyword">int</span> age</span>)</span>
    {
        <span class="hljs-keyword">this</span>.name = name;
        <span class="hljs-keyword">this</span>.age = age;
    }
}</code></span></pre>


<h5 class="wp-block-heading">2. Montar a lista no backend</h5>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">List</span>&lt;Person&gt; pList = <span class="hljs-keyword">new</span> <span class="hljs-keyword">List</span>&lt;Person&gt;();
pList.Add(<span class="hljs-keyword">new</span> Person(<span class="hljs-string">"Jack"</span>, <span class="hljs-number">1</span>));
pList.Add(<span class="hljs-keyword">new</span> Person(<span class="hljs-string">"Ben"</span>, <span class="hljs-number">11</span>));
pList.Add(<span class="hljs-keyword">new</span> Person(<span class="hljs-string">"Kevin"</span>, <span class="hljs-number">100</span>));
pList.Add(<span class="hljs-keyword">new</span> Person(<span class="hljs-string">"Simon"</span>, <span class="hljs-number">500</span>));
pList.Add(<span class="hljs-keyword">new</span> Person(<span class="hljs-string">"Lulu"</span>, <span class="hljs-number">20</span>));
context.Put(<span class="hljs-string">"pList"</span>, pList);</code></span></pre>


<h5 class="wp-block-heading">3. Forma de acessar propriedades no template</h5>



<p class="wp-block-paragraph">Código do template:</p>


<pre class="wp-block-code"><span><code class="hljs language-xml">#foreach($per in $pList)
<span class="hljs-tag">&lt;<span class="hljs-name">tr</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>$per.name<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>$per.age<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">tr</span>&gt;</span>
#end</code></span></pre>


<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>Não consegue ler os dados! Erros ou conteúdo em branco</strong></p>



<h4 class="wp-block-heading">Princípio fundamental</h4>



<p class="wp-block-paragraph">Regra de acesso a propriedades de objeto no Velocity:<br><code>$per.xxx</code> procura automaticamente o <strong>método Get público <code>GetXxx()</code></strong></p>



<ul class="wp-block-list">
<li><code>$per.name</code> → tenta chamar <code>per.getName()</code></li>



<li><code>$per.age</code> → tenta chamar <code>per.getAge()</code></li>
</ul>



<p class="wp-block-paragraph">Sua entidade:</p>



<ul class="wp-block-list">
<li>Campos privados: <code>name</code>, <code>age</code></li>



<li><strong>Propriedades públicas com letra inicial maiúscula: <code>Name</code>, <code>Age</code></strong>, métodos correspondentes <code>GetName()</code>, <code>GetAge()</code></li>
</ul>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" />Forma correta no template:</p>


<pre class="wp-block-code"><span><code class="hljs language-xml">#foreach($per in $pList)
<span class="hljs-tag">&lt;<span class="hljs-name">tr</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>$per.Name<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>$per.Age<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">tr</span>&gt;</span>
#end</code></span></pre>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Observação: No C# as propriedades começam com letra maiúscula; no Java costumam ser minúsculas. Essa é uma armadilha de caixa‑alta/baixa muito comum para iniciantes.</p>
</blockquote>



<h4 class="wp-block-heading">3. Variáveis embutidas úteis do #foreach</h4>



<p class="wp-block-paragraph">Variáveis nativas disponíveis dentro do laço:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Variável</th><th>Função</th></tr></thead><tbody><tr><td><code>$foreach.index</code></td><td>Índice atual, <strong>começa em 0</strong></td></tr><tr><td><code>$foreach.count</code></td><td>Número sequencial atual, <strong>começa em 1</strong></td></tr><tr><td><code>$foreach.first</code></td><td>Indica se é o primeiro registro (valor booleano)</td></tr><tr><td><code>$foreach.last</code></td><td>Indica se é o último registro (valor booleano)</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Exemplo:</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">#foreach($per in $pList)</span>
    $foreach.count , Nome: $per.Name
<span class="hljs-comment">#end</span></code></span></pre>


<h4 class="wp-block-heading">4. Exibição em tabela</h4>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">table</span> <span class="hljs-attr">border</span>=<span class="hljs-string">"0"</span> <span class="hljs-attr">cellpadding</span>=<span class="hljs-string">"0"</span> <span class="hljs-attr">cellspacing</span>=<span class="hljs-string">"0"</span>&gt;</span>
#foreach($per in $pList)
    <span class="hljs-tag">&lt;<span class="hljs-name">tr</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>$per.Name<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>$per.Age<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">tr</span>&gt;</span>
#end
<span class="hljs-tag">&lt;/<span class="hljs-name">table</span>&gt;</span></code></span></pre>


<h4 class="wp-block-heading">Resumo</h4>



<ol class="wp-block-list">
<li><code>#foreach(variavel in coleção)</code> + <code>#end</code> é o laço padrão do Velocity;</li>



<li>Para iterar listas comuns, exiba diretamente <code>$variavel</code>;</li>



<li>Ao iterar objetos de entidade: use <code>$objeto.nomePropriedade</code> <strong>respeitando a capitalização das propriedades públicas</strong>, não acesse campos privados;</li>



<li>Nas entidades C#, recomenda‑se padronizar propriedades com letra inicial maiúscula e manter o mesmo padrão no template;</li>



<li>Se os dados ficarem em branco, verifique primeiramente <strong>a capitalização das propriedades e a existência do acessor get</strong>.</li>
</ol>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Iterar coleções</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/pt-pt/2026/08/14/iterar-colecoes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Comentários</title>
		<link>https://www.foxdevelop.com/pt-pt/2026/08/14/comentarios-4/</link>
					<comments>https://www.foxdevelop.com/pt-pt/2026/08/14/comentarios-4/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 03:12:41 +0000</pubDate>
				<category><![CDATA[Tutorial do NVelocity]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8474</guid>

					<description><![CDATA[1. Diferença entre comentários de template Sintaxe Tipo Características &#60;!-- Comentário HTML --&#62; Comentário nativo HTML É gerado no código‑fonte final da página, visível ao exibir o código no navegador ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">1. Diferença entre comentários de template</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Sintaxe</th><th>Tipo</th><th>Características</th></tr></thead><tbody><tr><td><code>&lt;!-- Comentário HTML --&gt;</code></td><td>Comentário nativo HTML</td><td><strong>É gerado no código‑fonte final da página</strong>, visível ao exibir o código no navegador</td></tr><tr><td><code>## Comentário de linha única</code></td><td>Comentário de linha única do Velocity</td><td>Reconhecido apenas pelo motor, <strong>não aparece na página</strong>, válido até o fim da linha</td></tr><tr><td><code>#* Conteúdo do comentário multilinha *#</code></td><td>Comentário multilinha do Velocity</td><td>Suporta quebras de linha, <strong>não aparece na página</strong></td></tr></tbody></table></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Dica de desenvolvimento: use preferencialmente <code>##</code> / <code>#* *#</code> para comentários de lógica de negócio, evitando vazar anotações no código‑fonte da página.</p>
</blockquote>



<h3 class="wp-block-heading">2. Regras de nomenclatura de variáveis</h3>



<p class="wp-block-paragraph">Regras básicas oficiais</p>



<ol class="wp-block-list">
<li>O primeiro caractere da variável <strong>precisa ser uma letra</strong> (a‑z / A‑Z)</li>



<li>Caracteres permitidos depois: letras, números <code>0‑9</code>, sublinhado <code>_</code>, hífen <code>-</code></li>
</ol>



<h4 class="wp-block-heading">O hífen <code>-</code> causa ambiguidade com operadores</h4>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">#set($name-d = "test")</span></code></span></pre>


<p class="wp-block-paragraph">Ao executar, ocorre o erro: <code>Encountered "name" ... Was expecting one of:</code><br><strong>Motivo: o Velocity interpreta <code>-</code> como operador de subtração!</strong><br>O motor interpreta como <code>$name - d</code>, ou seja, variável <code>$name</code> menos variável <code>d</code>, gerando conflito de sintaxe.</p>



<p class="wp-block-paragraph">Duas formas de resolver:</p>



<ol class="wp-block-list">
<li><strong>Recomendado: usar sublinhado</strong> (sem ambiguidade, convenção comum)</li>
</ol>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">#set($name_d = "hello world")</span></code></span></pre>


<ol start="2" class="wp-block-list">
<li><strong>Delimitar a variável com chaves</strong> (compatível com nomes que possuem hífen)</li>
</ol>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">#set(${name-d} = "hello world")</span>
${name-d}</code></span></pre>


<h4 class="wp-block-heading">Comparativo exemplos válidos / inválidos</h4>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment"># <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Válido</span>
<span class="hljs-comment">#set($name_d = "sublinhado")</span>
<span class="hljs-comment">#set($name12d = "inicia com letra mais números")</span>
<span class="hljs-comment">#set(${name-1_2d} = "hífen exige chaves")</span>

<span class="hljs-comment"># <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Hífen direto sem chaves → erro de análise</span>
<span class="hljs-comment">#set($name-d = "Erro!")</span>
<span class="hljs-comment">#set($name-1_2d = "Erro!")</span></code></span></pre>


<h3 class="wp-block-heading">3. Regras de escrita da sintaxe #set</h3>



<p class="wp-block-paragraph">Forma padrão (espaços ao redor dos parênteses são flexíveis, recomenda‑se manter estilo consistente)</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">#set($nomeVariavel = "valor")</span></code></span></pre>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Strings precisam estar dentro de aspas duplas; mantenha espaços ao redor do sinal de igual para melhor legibilidade.</p>
</blockquote>



<p class="wp-block-paragraph">Comentários</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/pt-pt/2026/08/14/comentarios-4/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Reutilização de templates</title>
		<link>https://www.foxdevelop.com/pt-pt/2026/08/14/reutilizacao-de-templates/</link>
					<comments>https://www.foxdevelop.com/pt-pt/2026/08/14/reutilizacao-de-templates/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 03:04:45 +0000</pubDate>
				<category><![CDATA[Tutorial do NVelocity]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8458</guid>

					<description><![CDATA[1. Função principal O motor de templates Velocity implementa a reutilização de templates por meio de #include / #parse.Partes comuns das páginas web, como a navegação do cabeçalho _head.htm e ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">1. Função principal</h3>



<p class="wp-block-paragraph">O motor de templates Velocity implementa a <strong>reutilização de templates</strong> por meio de <code>#include</code> / <code>#parse</code>.<br>Partes comuns das páginas web, como a navegação do cabeçalho <code>_head.htm</code> e o rodapé com direitos autorais <code>_footer.htm</code>, são extraídas em subtemplates independentes e importadas dentro das páginas, evitando a repetição de código HTML em vários locais.</p>



<h3 class="wp-block-heading">2. Principais diferenças entre os dois comandos</h3>



<h4 class="wp-block-heading">1. <code>#include("caminho‑do‑arquivo")</code></h4>



<p class="wp-block-paragraph"><strong>Apenas exibe o conteúdo original do arquivo, sem interpretar as variáveis do Velocity (<code>$!{xxx}</code>) presentes no subtemplate</strong></p>



<ul class="wp-block-list">
<li><code>$!{testinclude}</code> dentro do subtemplate não é renderizado; a string literal <code>$!{testinclude}</code> é exibida diretamente</li>



<li>Suporta carregar <strong>vários arquivos de uma vez</strong>: <code>#include("a.htm","b.htm")</code></li>



<li>Ideal para: HTML puramente estático e trechos estáticos sem variáveis VTL</li>
</ul>



<h4 class="wp-block-heading">2. <code>#parse("caminho‑do‑arquivo")</code></h4>



<p class="wp-block-paragraph"><strong>Importa o subtemplate e interpreta completamente a sintaxe do Velocity</strong>. Variáveis enviadas pelo template pai funcionam normalmente dentro do subtemplate.</p>



<ul class="wp-block-list">
<li><code>$!{testinclude}</code> no subtemplate lê as variáveis de contexto e é substituído pelos valores enviados pelo código backend</li>



<li><strong>Aceita apenas um único caminho de arquivo</strong> e não permite importar múltiplos arquivos simultaneamente</li>



<li>Ideal para: templates compartilhados com <strong>variáveis</strong>, como cabeçalhos e rodapés (títulos de página, textos dinâmicos de direitos autorais etc.)</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Conteúdo das suas anotações da captura de tela:<br><code>#include apenas insere o código do subtemplate no template principal sem interpretá‑lo, enquanto #parse realiza a interpretação</code></p>
</blockquote>



<h3 class="wp-block-heading">3. Exemplo prático</h3>



<h4 class="wp-block-heading">1. Código backend (.cs)</h4>


<pre class="wp-block-code"><span><code class="hljs language-javascript">context.Put(<span class="hljs-string">"testinclude"</span>, <span class="hljs-string">"Texto vindo do subtemplate:"</span>);</code></span></pre>


<h4 class="wp-block-heading">2. Conteúdo do subtemplate <code>_footer.htm</code></h4>


<pre class="wp-block-code"><span><code class="hljs">Informação de direitos autorais $!{testinclude}</code></span></pre>


<h5 class="wp-block-heading">Cenário ① Usando <code>#include("./themes/default/_footer.htm")</code></h5>



<p class="wp-block-paragraph">Resultado exibido na página:</p>


<pre class="wp-block-code"><span><code class="hljs">Informação de direitos autorais $!{testinclude}</code></span></pre>


<p class="wp-block-paragraph">A variável não foi interpretada e o placeholder é impresso literalmente.</p>



<h5 class="wp-block-heading">Cenário ② Usando <code>#parse("./themes/default/_footer.htm")</code></h5>



<p class="wp-block-paragraph">Resultado exibido na página:</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">Informação de direitos autorais Texto vindo <span class="hljs-keyword">do</span> subtemplate:</code></span></pre>


<p class="wp-block-paragraph">A variável é renderizada corretamente. Esse é o motivo pelo qual <code>#parse</code> é preferido para templates compartilhados de cabeçalho e rodapé nos projetos.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">4. Recomendações de uso</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Comando</th><th>Cenário adequado</th></tr></thead><tbody><tr><td><code>#include</code></td><td>Recursos estáticos, texto puro, fragmentos HTML estáticos sem necessidade de renderização de variáveis</td></tr><tr><td><code>#parse</code></td><td>Cabeçalhos, rodapés e barras laterais compartilhadas; subtemplates com <code>$variáveis</code>, <code>#if</code> e outras sintaxes VTL</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Regra de desenvolvimento:<br>Use sempre <code>#parse</code> para componentes compartilhados que provavelmente precisarão de variáveis dinâmicas, como menus de navegação e rodapés de direitos autorais. Utilize <code>#include</code> para trechos de texto e estilos totalmente estáticos.</p>



<p class="wp-block-paragraph">Reutilização de templates</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/pt-pt/2026/08/14/reutilizacao-de-templates/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Definir variáveis dentro do modelo</title>
		<link>https://www.foxdevelop.com/pt-pt/2026/08/14/definir-variaveis-dentro-do-modelo/</link>
					<comments>https://www.foxdevelop.com/pt-pt/2026/08/14/definir-variaveis-dentro-do-modelo/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 02:38:05 +0000</pubDate>
				<category><![CDATA[Tutorial do NVelocity]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8442</guid>

					<description><![CDATA[As variáveis estudadas até agora eram definidas no código‑behind C# e depois usadas nos modelos. Na verdade você pode criar variáveis diretamente dentro do modelo usando a diretiva set. 1. ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">As variáveis estudadas até agora eram definidas no código‑behind C# e depois usadas nos modelos. Na verdade você pode criar variáveis diretamente dentro do modelo usando a diretiva set.</p>



<h3 class="wp-block-heading">1. Definir variáveis com <code>#set()</code></h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Duas formas de declarar variáveis:<br>Método 1: definir variáveis antecipadamente no código backend C#/Java e ler no modelo;<br>Método 2: <strong>definir variáveis diretamente dentro do modelo com <code>#set()</code></strong> (ponto principal desta lição)</p>



<p class="wp-block-paragraph"></p>
</blockquote>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">#set($name = "hello foxdevelop.com")</span>
<span class="hljs-comment">#set($okay = "common baby")</span>
<span class="hljs-comment">#set($nameokay = "$name|$okay")</span></code></span></pre>


<ul class="wp-block-list">
<li><code>#set(variável = valor)</code> aceita strings, números, arrays, propriedades de objetos e atribuições vindas de outras variáveis</li>



<li>Tipagem fraca, não precisa declarar o tipo da variável</li>
</ul>



<h3 class="wp-block-heading">2. Duas sintaxes e regras para renderizar variáveis</h3>



<h4 class="wp-block-heading">2.1 Formas básicas</h4>



<ul class="wp-block-list">
<li><code>$name</code>: se a variável não existir, imprime o texto literal <code>$name</code></li>



<li><code>$!name</code>: <strong>renderização silenciosa</strong>; retorna conteúdo vazio quando a variável falta (recomendado para evitar textos estranhos <code>$xxx</code> na página)</li>



<li>Sintaxe padrão recomendada: <strong><code>${name}</code></strong> (chaves delimitam explicitamente o nome da variável)</li>
</ul>



<h4 class="wp-block-heading">2.2 Exemplo de problema de limite</h4>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">#set($name = "hello")</span>
$namehello     × o motor interpreta como variável $namehello e não encontra
${name}hello   √ correto: resolve $name e concatena o texto hello</code></span></pre>


<h3 class="wp-block-heading">3. Comentários de linha única <code>##</code></h3>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">## Este é um comentário, não aparece na saída final</span>
<span class="hljs-comment">#set($name = "test") ## comentários no fim da linha também são suportados</span></code></span></pre>


<ol class="wp-block-list">
<li>O conteúdo dos comentários<strong>não é enviado para a página renderizada</strong>;</li>



<li>Não ficam visíveis no código‑fonte do navegador (são descartados durante o processamento do motor de modelos).</li>
</ol>



<h3 class="wp-block-heading">4. Tipos de atribuição suportados por #set</h3>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">## Atribuição de string</span>
<span class="hljs-comment">#set($name = "hello world")</span>

<span class="hljs-comment">## Atribuir uma variável a outra</span>
<span class="hljs-comment">#set($obj= $name)</span>

<span class="hljs-comment">## Atribuir propriedades de objeto</span>
<span class="hljs-comment">#set($obj.Friend = "monica")</span>
<span class="hljs-comment">#set($obj.Blame = $whitehouse.Leak)</span>

<span class="hljs-comment">## Chamar método e atribuir seu retorno</span>
<span class="hljs-comment">#set($obj.Plan = $spindoctor.weave($web))</span>

<span class="hljs-comment">## Atribuição numérica</span>
<span class="hljs-comment">#set($obj.Number = 123)</span>

<span class="hljs-comment">## Atribuição de array</span>
<span class="hljs-comment">#set($obj.Say = &#91;"Not", $my, "fault"])</span></code></span></pre>


<h3 class="wp-block-heading">5. Regras especiais para variáveis inexistentes</h3>


<pre class="wp-block-code"><span><code class="hljs language-php">$sadfsdfsd</code></span></pre>


<p class="wp-block-paragraph">Quando o motor de modelo não consegue resolver a variável:</p>



<ul class="wp-block-list">
<li>Sintaxe normal <code>$sadfsdfsd</code>: imprime literalmente o texto <code>$sadfsdfsd</code></li>



<li>Usando <code>$!sadfsdfsd</code>: retorna string vazia quando a variável não existe</li>
</ul>



<p class="wp-block-paragraph">Definir variáveis dentro do modelo</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/pt-pt/2026/08/14/definir-variaveis-dentro-do-modelo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Sintaxe básica de templates</title>
		<link>https://www.foxdevelop.com/pt-pt/2026/08/14/sintaxe-basica-de-templates/</link>
					<comments>https://www.foxdevelop.com/pt-pt/2026/08/14/sintaxe-basica-de-templates/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 02:25:43 +0000</pubDate>
				<category><![CDATA[Tutorial do NVelocity]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8425</guid>

					<description><![CDATA[I. Passar objetos de entidade para o template 1. Classe de entidade PageInfo Até agora passávamos apenas strings simples. Essa abordagem é ineficiente e dificulta a manutenção. Empacotar dados em ...]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">I. Passar objetos de entidade para o template</h3>



<h4 class="wp-block-heading">1. Classe de entidade PageInfo</h4>



<p class="wp-block-paragraph">Até agora passávamos apenas strings simples. Essa abordagem é ineficiente e dificulta a manutenção. Empacotar dados em objetos de entidade deixa o código muito mais intuitivo.</p>


<pre class="wp-block-code"><span><code class="hljs language-cs"><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">PageInfo</span>
{
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">bool</span> IsShowImage;
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">bool</span> IsShowImage1
    {
        <span class="hljs-keyword">get</span> { <span class="hljs-keyword">return</span> IsShowImage; }
        <span class="hljs-keyword">set</span> { IsShowImage = <span class="hljs-keyword">value</span>; }
    }
}</code></span></pre>


<ul class="wp-block-list">
<li>Campo privado <code>IsShowImage</code>, exposto pela propriedade pública <strong><code>IsShowImage1</code></strong></li>



<li>Acesso dentro do template: <code>$info.IsShowImage1</code></li>
</ul>



<h4 class="wp-block-heading">2. Preencher dados do contexto</h4>


<pre class="wp-block-code"><span><code class="hljs language-cs"><span class="hljs-comment">//Container de contexto do template</span>
IContext context = <span class="hljs-keyword">new</span> VelocityContext();

PageInfo pi = <span class="hljs-keyword">new</span> PageInfo();
pi.IsShowImage1 = <span class="hljs-literal">true</span>;

<span class="hljs-comment">//Armazenar objeto pi com a chave info no contexto</span>
context.Put(<span class="hljs-string">"info"</span>,pi);

<span class="hljs-comment">//Exemplo de variável string</span>
context.Put(<span class="hljs-string">"infotitle"</span>,<span class="hljs-string">"Olá"</span>);</code></span></pre>


<p class="wp-block-paragraph"><code>context.Put("nomeChave",dados)</code>：envia dados para o template, o template lê os dados usando <code>$nomeChave</code>.</p>



<h3 class="wp-block-heading">II. Sintaxe principal do template Velocity</h3>



<h4 class="wp-block-heading">1. Marcador de diretiva <code>#</code></h4>



<p class="wp-block-paragraph">Instruções iniciadas com <code>#</code> são diretivas. As mais comuns:<br><code>#if</code>, <code>#else</code>, <code>#end</code>, <code>#foreach</code>, <code>#set</code>, <code>#include</code></p>



<p class="wp-block-paragraph">Exemplo de renderização condicional:</p>



<p class="wp-block-paragraph">Prepare duas imagens e coloque‑as na pasta Contents/Images na raiz do site. Altere o valor de IsShowImage1 para exibir imagens diferentes.</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">#if($info.IsShowImage1)</span>
    &lt;img src=<span class="hljs-string">"./Contents/Images/a.gif"</span> /&gt;
<span class="hljs-comment">#else</span>
    &lt;img src=<span class="hljs-string">"./Contents/Images/b.gif"</span> /&gt;
<span class="hljs-comment">#end</span></code></span></pre>


<p class="wp-block-paragraph">Lógica: exibe a.gif quando <code>IsShowImage1=true</code>, senão exibe b.gif</p>



<h4 class="wp-block-heading">2. Marcador de variável <code>$</code></h4>



<ul class="wp-block-list">
<li><code>$nomeVariavel</code>：exibe valor da variável</li>



<li><code>${nomeVariavel}</code>：<strong>delimita o limite da variável</strong> (muito importante!)</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Cenário: texto logo após a variável, o motor não consegue identificar onde termina o nome da variável.</p>
</blockquote>


<pre class="wp-block-code"><span><code class="hljs language-php">Forma incorreta: $infotitlefoxdevelop.com
O motor interpreta tudo como variável infotitlefoxdevelop, que não existe.

Forma correta: ${infotitle}foxdevelop.com
O motor resolve a variável infotitle e concatena a string foxdevelop.com</code></span></pre>


<h4 class="wp-block-heading">3. Modificador de saída silenciosa <code>!</code> → <code>$!nomeVariavel</code></h4>



<p class="wp-block-paragraph">Comportamento padrão: se a variável não existir, o texto bruto <code>$nomeVariavel</code> é impresso na página<br><code>$!nomeVariavel</code>：retorna conteúdo vazio quando variável não existe ou é nula, sem imprimir o cifrão</p>



<p class="wp-block-paragraph">Exemplo comparativo:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Sintaxe</th><th>Variável existe(valor=&#8221;Olá&#8221;)</th><th>Variável inexistente</th></tr></thead><tbody><tr><td><code>$infotitle</code></td><td>Olá</td><td><code>$infotitle</code></td></tr><tr><td><code>$!infotitle</code></td><td>Olá</td><td>(vazio, nada é exibido)</td></tr><tr><td><code>${infotitle}</code></td><td>Olá</td><td><code>${infotitle}</code></td></tr><tr><td><code>$!{infotitle}</code></td><td>Olá</td><td>vazio</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Código de teste completo:</p>


<pre class="wp-block-code"><span><code class="hljs language-xml">${infotitle}foxdevelop.com <span class="hljs-tag">&lt;<span class="hljs-name">br</span>/&gt;</span>
$!infotitlefoxdevelop.com <span class="hljs-tag">&lt;<span class="hljs-name">br</span>/&gt;</span>
$infotitle <span class="hljs-tag">&lt;<span class="hljs-name">br</span>/&gt;</span>
$!infotitle <span class="hljs-tag">&lt;<span class="hljs-name">br</span>/&gt;</span></code></span></pre>


<h3 class="wp-block-heading">Resumo</h3>



<ol class="wp-block-list">
<li>Sempre envolva variável com <code>${variavel}</code> quando for concatenar texto depois dela</li>



<li>Prefira usar <code>$!{nomeVariavel}</code> em ambiente de produção, evita que valores nulos imprimam <code>$xxx</code> e quebrem o layout</li>



<li>Ao testar propriedade booleana com <code>#if</code>, escreva diretamente <code>#if($info.IsShowImage1)</code>, não é necessário escrever <code>==true</code></li>
</ol>



<p class="wp-block-paragraph">Sintaxe básica de templates</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/pt-pt/2026/08/14/sintaxe-basica-de-templates/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Apresentação do NVelocity</title>
		<link>https://www.foxdevelop.com/pt-pt/2026/08/01/apresentacao-do-nvelocity/</link>
					<comments>https://www.foxdevelop.com/pt-pt/2026/08/01/apresentacao-do-nvelocity/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Sat, 01 Aug 2026 12:53:51 +0000</pubDate>
				<category><![CDATA[Tutorial do NVelocity]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=7137</guid>

					<description><![CDATA[Motor de templates para plataforma .NET, uma versão portada para .NET do Velocity, voltado para a plataforma Java. Apresentação Amplamente utilizado em projetos ASP.NET;O ASP.NET MVC conta com o motor ...]]></description>
										<content:encoded><![CDATA[<p>Motor de templates para plataforma .NET, uma versão portada para .NET do Velocity, voltado para a plataforma Java.</p>


<h4 class="wp-block-heading">Apresentação</h4>



<p class="wp-block-paragraph">Amplamente utilizado em projetos ASP.NET;<br>O ASP.NET MVC conta com o motor de templates Razor nativo;</p>



<p class="wp-block-paragraph">Muitos desenvolvedores optam pelo NVelocity quando querem adotar o padrão MVC em projetos tradicionais com páginas <code>.aspx</code>.</p>



<p class="wp-block-paragraph">O NVelocity não recebe mais atualizações e só é utilizado em projetos legados do .NET Framework. Para projetos novos, dê preferência a motores modernos como Razor e Handlebars.NET.</p>



<p class="wp-block-paragraph">Relação entre versões e o .NET Framework</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Versão do .NET Framework</th><th>Versão do NVelocity</th></tr></thead><tbody><tr><td>.NET 4.0</td><td>1.0 (última versão oficial)</td></tr><tr><td>.NET 2.0</td><td>0.5</td></tr><tr><td>.NET 1.0</td><td>0.48</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Velocity é um motor de templates tradicional para Java, com sintaxe compacta que usa <code>#</code> e <code>$</code> como marcadores. O NVelocity traz essa sintaxe integralmente para o ambiente .NET;</p>



<h4 class="wp-block-heading">Download</h4>



<p class="wp-block-paragraph">A última atualização oficial ocorreu em 2018, sendo a versão mais recente a 1.2.0</p>



<p class="wp-block-paragraph">Você pode baixar o código no endereço abaixo</p>



<p class="wp-block-paragraph">Trata-se de um projeto open source hospedado no GitHub <a href="https://github.com/castleproject/NVelocity/tree/master">castleproject/NVelocity: Castle&#8217;s NVelocity</a></p>



<p class="wp-block-paragraph">O arquivo baixado oficialmente não contém uma DLL já compilada. Você pode baixar o código fonte e compilar manualmente, ou adicionar o projeto diretamente à sua solução.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="397" height="269" src="https://www.foxdevelop.com/wp-content/uploads/2026/08/image-13.png" alt="" class="wp-image-7081" srcset="https://www.foxdevelop.com/wp-content/uploads/2026/08/image-13.png 397w, https://www.foxdevelop.com/wp-content/uploads/2026/08/image-13-300x203.png 300w" sizes="(max-width: 397px) 100vw, 397px" /></figure>



<p class="wp-block-paragraph">Abra o arquivo sln no Visual Studio</p>



<p class="wp-block-paragraph">A última versão é baseada no .NET Core 2.1. Recomenda-se atualizar o projeto para o .NET 4.8</p>



<p class="wp-block-paragraph">Após compilar, as DLLs estarão disponíveis no diretório de saída</p>



<figure class="wp-block-image size-full"><img decoding="async" width="372" height="76" src="https://www.foxdevelop.com/wp-content/uploads/2026/08/image-14.png" alt="" class="wp-image-7082" srcset="https://www.foxdevelop.com/wp-content/uploads/2026/08/image-14.png 372w, https://www.foxdevelop.com/wp-content/uploads/2026/08/image-14-300x61.png 300w" sizes="(max-width: 372px) 100vw, 372px" /></figure>



<p class="wp-block-paragraph">Depois basta importar o arquivo em outros projetos ASP.NET Web. Adicione o NVelocity.dll ao seu projeto web.</p>



<h4 class="wp-block-heading">Integração ao projeto</h4>



<p class="wp-block-paragraph">Adicione a referência ao assembly NVelocity.dll no projeto<br>Vantagem principal: com esse motor, fica muito simples implementar troca de múltiplos templates (mudança de tema) no site</p>



<p class="wp-block-paragraph">Crie uma pasta chamada Themes na raiz do site, que funcionará como diretório principal de todos os templates<br>Dentro de Themes, crie subpastas para cada tema, como nos exemplos:</p>



<p class="wp-block-paragraph">Crie a pasta Themes na raiz web como diretório de temas</p>



<h4 class="wp-block-heading">Diretório de temas</h4>



<p class="wp-block-paragraph">Em seguida, crie uma pasta default para o template padrão<br>Você poderá adicionar outros conjuntos depois: Themes/blue, Themes/dark e assim por diante</p>


<pre class="wp-block-code"><span><code class="hljs language-php">Raiz <span class="hljs-keyword">do</span> site
└── Themes
    ├── <span class="hljs-keyword">default</span>      <span class="hljs-comment"># Arquivos do tema padrão</span>
    ├── dark         <span class="hljs-comment"># Arquivos do tema escuro</span>
    └── blue         <span class="hljs-comment"># Arquivos do tema azul</span></code></span></pre>


<p class="wp-block-paragraph">Em tempo de execução, o nome do tema ativo é lido da configuração e o NVelocity carrega os templates da pasta correspondente.<br>A troca de template funciona alterando apenas o caminho configurado para a pasta de temas, sem necessidade de mudar o código de regras de negócio.<br>Ideal para projetos antigos ASP.NET WebForm (.aspx) que precisam de troca de visual na área pública.</p>



<h4 class="wp-block-heading">aspx</h4>



<p class="wp-block-paragraph">Crie uma nova página aspx na raiz do site: <code>Register.aspx</code>, usada como exemplo de acesso.</p>



<p class="wp-block-paragraph">Dentro de <code>Themes/default</code>, crie o arquivo de template <code>register.htm</code>. Esse arquivo é o template NVelocity e contém código HTML e sintaxe Velocity.</p>



<p class="wp-block-paragraph">Abra <code>Register.aspx</code>, <strong>mantenha apenas a diretiva da página</strong> e apague todo o restante do conteúdo HTML:</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">%@</span> <span class="hljs-attr">Page</span> <span class="hljs-attr">Language</span>=<span class="hljs-string">"C#"</span> <span class="hljs-attr">AutoEventWireup</span>=<span class="hljs-string">"true"</span> <span class="hljs-attr">CodeBehind</span>=<span class="hljs-string">"Register.aspx.cs"</span> <span class="hljs-attr">Inherits</span>=<span class="hljs-string">"NVelocityStudy.Web.Register"</span> %&gt;</span></code></span></pre>


<p class="wp-block-paragraph">O arquivo aspx não fará mais a renderização da página, ele só serve como ponto de entrada do controlador. O código-behind chamará o NVelocity para carregar o template <code>register.htm</code> e gerar o conteúdo final.</p>


<pre class="wp-block-code"><span><code class="hljs language-php">Raiz <span class="hljs-keyword">do</span> site
├─ Register.aspx          <span class="hljs-comment"># Ponto de acesso</span>
├─ Register.aspx.cs       <span class="hljs-comment"># Lógica do código-behind</span>
└─ Themes
    └─ <span class="hljs-keyword">default</span>
        └─ register.htm   <span class="hljs-comment"># Template NVelocity</span></code></span></pre>


<p class="wp-block-paragraph">Depois escreva o código em <code>Register.aspx.cs</code> para carregar o template <code>register.htm</code> do tema atual, enviar o modelo de dados e gerar o HTML final.</p>



<p class="wp-block-paragraph">Para trocar de tema, basta alterar o caminho do diretório para carregar o arquivo <code>register.htm</code> da pasta do tema escolhido.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="325" height="357" src="https://www.foxdevelop.com/wp-content/uploads/2026/08/image-15.png" alt="" class="wp-image-7083" srcset="https://www.foxdevelop.com/wp-content/uploads/2026/08/image-15.png 325w, https://www.foxdevelop.com/wp-content/uploads/2026/08/image-15-273x300.png 273w" sizes="auto, (max-width: 325px) 100vw, 325px" /></figure>



<h4 class="wp-block-heading">aspx.cs</h4>



<p class="wp-block-paragraph">Abra o arquivo de código-behind <code>Register.aspx.cs</code>. Implemente a lógica de renderização do NVelocity dentro do método <strong>Page_Load</strong>, executado para processar o template quando a página carregar.</p>


<pre class="wp-block-code"><span><code class="hljs language-cs"><span class="hljs-keyword">using</span> System;
<span class="hljs-keyword">using</span> System.Collections.Generic;
<span class="hljs-keyword">using</span> System.Web;
<span class="hljs-keyword">using</span> System.Web.UI;
<span class="hljs-keyword">using</span> System.Web.UI.WebControls;

<span class="hljs-keyword">namespace</span> <span class="hljs-title">NVelocityStudy.Web</span>
{
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">partial</span> <span class="hljs-keyword">class</span> <span class="hljs-title">Register</span> : <span class="hljs-title">System</span>.<span class="hljs-title">Web</span>.<span class="hljs-title">UI</span>.<span class="hljs-title">Page</span>
    {
        <span class="hljs-function"><span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Page_Load</span>(<span class="hljs-params"><span class="hljs-keyword">object</span> sender, EventArgs e</span>)</span>
        {
            <span class="hljs-comment">// Insira aqui o código para carregar o template e renderizar a página com NVelocity</span>
        }
    }
}</code></span></pre>


<p class="wp-block-paragraph">Adicione o código abaixo dentro de Page_Load</p>


<pre class="wp-block-code"><span><code class="hljs language-cs"><span class="hljs-function"><span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Page_Load</span>(<span class="hljs-params"><span class="hljs-keyword">object</span> sender, EventArgs e</span>)</span>
{
    <span class="hljs-comment">//Passo 1: Criar instância do VelocityEngine</span>
    VelocityEngine ve = <span class="hljs-keyword">new</span> VelocityEngine();

    <span class="hljs-comment">//Passo 2: Inicializar configurações do motor</span>
    ExtendedProperties pros = <span class="hljs-keyword">new</span> ExtendedProperties();
    pros.AddProperty(RuntimeConstants.RESOURCE_LOADER, <span class="hljs-string">"file"</span>); <span class="hljs-comment">// Carregar templates por arquivo</span>
    pros.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, Server.MapPath(<span class="hljs-string">@""</span>)); <span class="hljs-comment">// Diretório raiz dos templates</span>
    ve.Init(pros); <span class="hljs-comment">// Inicializar motor com as configurações</span>

    <span class="hljs-comment">//Passo 3: Ler arquivo de template</span>
    Template template = ve.GetTemplate(<span class="hljs-string">"themes/default/register.htm"</span>);

    <span class="hljs-comment">//Passo 4: Criar contexto e enviar variáveis ao template</span>
    IContext context = <span class="hljs-keyword">new</span> VelocityContext();
    context.Put(<span class="hljs-string">"websiteName"</span>, <span class="hljs-string">"FoxDevelop"</span>);
    context.Put(<span class="hljs-string">"domainName"</span>, <span class="hljs-string">"foxdevelop.com"</span>);

    <span class="hljs-comment">//Passo 5: Combinar template e dados para renderizar HTML</span>
    StringWriter writer = <span class="hljs-keyword">new</span> StringWriter();
    template.Merge(context, writer); <span class="hljs-comment">// O resultado renderizado é salvo no writer</span>

    <span class="hljs-comment">//Passo 6: Enviar conteúdo para o navegador</span>
    Response.Write(writer.ToString().Replace(<span class="hljs-string">"\r\n"</span>, <span class="hljs-string">"&lt;br/&gt;"</span>));
}</code></span></pre>


<p class="wp-block-paragraph">Esse código faz a leitura do arquivo HTML de template, cria variáveis e substitui os marcadores presentes no HTML pelos valores correspondentes.</p>



<ol class="wp-block-list">
<li><strong>Instanciar VelocityEngine</strong>: Objeto de motor independente, diferente da chamada global estática <code>Velocity.Init()</code>. Suporta múltiplas configurações separadas.</li>



<li><strong>Inicialização e configuração do motor</strong></li>
</ol>



<ul class="wp-block-list">
<li><code>RESOURCE_LOADER=file</code>: Define que os templates são carregados de arquivos locais;</li>



<li><code>FILE_RESOURCE_LOADER_PATH</code>: Configura o diretório base para busca de templates;</li>



<li><code>ve.Init(pros)</code>: Carrega as configurações e conclui a inicialização.</li>
</ul>



<ol start="3" class="wp-block-list">
<li><strong>Carregar template com <code>GetTemplate()</code></strong>: Lê o arquivo <code>themes/default/register.htm</code> com base no diretório raiz configurado.</li>



<li><strong>Contexto de dados VelocityContext</strong>: Com <code>context.Put(chave, valor)</code> enviamos variáveis C# para o template. Dentro do arquivo htm acessamos elas usando <code>$websiteName</code> e <code>$domainName</code>.</li>



<li><strong>Renderização Merge no template</strong>: <code>template.Merge(contexto, fluxoSaída)</code> insere as variáveis no template e cria uma string HTML completa. Usamos <code>StringWriter</code> para receber o texto renderizado.</li>



<li><strong>Saída via Response</strong>: Envia o HTML final ao navegador. <code>Replace("\r\n","&lt;br/&gt;")</code> converte quebras de linha do código fonte em tags HTML de quebra de linha.</li>
</ol>



<h4 class="wp-block-heading">Template htm</h4>



<p class="wp-block-paragraph">Edite o arquivo <code>register.htm</code> dentro do diretório de temas</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-meta">&lt;!DOCTYPE <span class="hljs-meta-keyword">html</span> <span class="hljs-meta-keyword">PUBLIC</span> <span class="hljs-meta-string">"-//W3C//DTD XHTML 1.0 Transitional//EN"</span> <span class="hljs-meta-string">"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span> <span class="hljs-attr">xmlns</span>=<span class="hljs-string">"http://www.w3.org/1999/xhtml"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
    Site: $websiteName <span class="hljs-tag">&lt;<span class="hljs-name">br</span> /&gt;</span>
    Domínio: $domainName
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span></code></span></pre>


<p class="wp-block-paragraph">As duas marcações com $xxxxxxx são os espaços reservados das variáveis criadas no Page_Load. Elas serão substituídas pelos valores definidos durante a renderização.</p>



<ol class="wp-block-list">
<li><strong>Identificador de variável <code>$nomeDaVariavel</code></strong> <code>$websiteName</code> e <code>$domainName</code> seguem a sintaxe VTL do NVelocity. Os valores são definidos no código com <code>context.Put("websiteName", "FoxDevelop")</code> e o motor faz a substituição automática na renderização:</li>
</ol>



<ul class="wp-block-list">
<li><code>$websiteName</code> → <code>FoxDevelop</code></li>



<li><code>$domainName</code> → <code>foxdevelop.com</code></li>
</ul>



<p class="wp-block-paragraph">Resultado da execução</p>


<pre class="wp-block-code"><span><code class="hljs language-http"><span class="hljs-attribute">Site</span>: FoxDevelop
<span class="hljs-attribute">Domínio</span>: foxdevelop.com</code></span></pre>


<p class="wp-block-paragraph">Apresentação do NVelocity</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/pt-pt/2026/08/01/apresentacao-do-nvelocity/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
