<?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>NVelocity-Tutorial &#8211; FoxDevelop</title>
	<atom:link href="https://www.foxdevelop.com/de/category/c-de/c-bibliothek/nvelocity-tutorial-de/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.foxdevelop.com</link>
	<description>Unabhängiges Software-Entwicklungsstudio</description>
	<lastBuildDate>Fri, 14 Aug 2026 03:51:01 +0000</lastBuildDate>
	<language>de</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>NVelocity-Tutorial &#8211; FoxDevelop</title>
	<link>https://www.foxdevelop.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Escape‑Zeichen und if‑Bedingungen</title>
		<link>https://www.foxdevelop.com/de/2026/08/14/escape-zeichen-und-if-bedingungen/</link>
					<comments>https://www.foxdevelop.com/de/2026/08/14/escape-zeichen-und-if-bedingungen/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 03:51:01 +0000</pubDate>
				<category><![CDATA[NVelocity-Tutorial]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8534</guid>

					<description><![CDATA[Backslash‑Escape + #if‑Bedingungssyntax 1. Regeln zum Backslash‑Escape \ Vordefinierte Variable：#set($dog = "woof woof") VTL‑Code Ausgabe Hintergrund $dog woof woof Variable wird normal aufgelöst \$dog $dog Einzelner Backslash：escapt das folgende $, ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Backslash‑Escape + #if‑Bedingungssyntax</p>



<h4 class="wp-block-heading">1. Regeln zum Backslash‑Escape \</h4>



<p class="wp-block-paragraph">Vordefinierte Variable：<code>#set($dog = "woof woof")</code></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>VTL‑Code</th><th>Ausgabe</th><th>Hintergrund</th></tr></thead><tbody><tr><td><code>$dog</code></td><td>woof woof</td><td>Variable wird normal aufgelöst</td></tr><tr><td><code>\$dog</code></td><td>$dog</td><td><strong>Einzelner Backslash</strong>：escapt das folgende <code>$</code>, deaktiviert die Variablenauflösung und gibt <code>$</code> wörtlich aus</td></tr><tr><td><code>\\$dog</code></td><td>\woof woof</td><td>Erster <code>\</code> escapt zweiten <code>\</code> → gibt <code>\</code> aus；<br>verbleibendes <code>$dog</code> wird normal aufgelöst</td></tr><tr><td><code>\\\$dog</code></td><td>\$dog</td><td><code>\\</code> gibt <code>\</code> aus, <code>\$</code> gibt <code>$</code> aus</td></tr><tr><td><code>\\\\$dog</code></td><td>\woof woof</td><td><code>\\</code> gibt <code>\</code> aus, <code>\\</code> gibt <code>\</code> aus；<br><code>$dog</code> löst Variable auf</td></tr></tbody></table></figure>



<ol class="wp-block-list">
<li>Velocity‑Variablennamen<strong>müssen mit einem Buchstaben beginnen</strong>. <code>$10.0</code> wird nicht als Variable erkannt und unverändert ausgegeben. Bei Text wie <code>Microsoft $10,0 USD</code> ist kein zusätzliches Escapen nötig；</li>



<li><strong>Aufeinanderfolgende Backslashes heben sich paarweise auf</strong>；nur die Kombination <code>\$</code> kann das Dollar‑Zeichen escapen；</li>



<li>Um <code>$variablenName</code> wörtlich anzuzeigen, Standardschreibweise：<code>\$dog</code>.</li>
</ol>



<h4 class="wp-block-heading">2. #if‑Verzweigungs‑Syntax</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;Du bist ein Kind&lt;/h1&gt;
<span class="hljs-comment">#elseif ($ages &lt;18)</span>
    &lt;h1&gt;Du bist ein Jugendlicher&lt;/h1&gt;
<span class="hljs-comment">#elseif ($ages &lt;35)</span>
    &lt;h1&gt;Du bist junger Erwachsener&lt;/h1&gt;
<span class="hljs-comment">#elseif ($ages &lt;60)</span>
    &lt;h1&gt;Du bist mittleren Alters&lt;/h1&gt;
<span class="hljs-comment">#else</span>
    &lt;h1&gt;Du bist im Rentenalter&lt;/h1&gt;
<span class="hljs-comment">#end</span></code></span></pre>


<h5 class="wp-block-heading">Ausführungsergebnis</h5>



<p class="wp-block-paragraph"><code>$ages=22</code>, Bedingung <code>22 &lt; 35</code> trifft zu → Ausgabe：<code>&lt;h1&gt;Du bist junger Erwachsener&lt;/h1&gt;</code></p>



<h5 class="wp-block-heading">Hinweise</h5>



<ol class="wp-block-list">
<li>Der Block<strong>muss mit <code>#end</code></strong> abgeschlossen werden, fehlt er gibt es einen Parse‑Fehler；</li>



<li>Schlüsselwort：<code>#elseif</code>（<strong>Nicht als #else if mit Leerzeichen schreiben</strong>, das ist ungültig）；</li>



<li>Unterstützte Operatoren：<code>&lt; > &lt;= >= == != &amp;&amp; ||</code> u.v.m.；</li>



<li>Prüfung läuft von oben nach unten. Sobald eine Bedingung zutrifft, werden alle weiteren Zweige übersprungen.</li>
</ol>



<p class="wp-block-paragraph">Escape‑Zeichen und if‑Bedingungen</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/de/2026/08/14/escape-zeichen-und-if-bedingungen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Erweiterungsmethoden</title>
		<link>https://www.foxdevelop.com/de/2026/08/14/erweiterungsmethoden/</link>
					<comments>https://www.foxdevelop.com/de/2026/08/14/erweiterungsmethoden/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 03:46:07 +0000</pubDate>
				<category><![CDATA[NVelocity-Tutorial]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8518</guid>

					<description><![CDATA[1. Backend‑Code der Person‑Entität (C#) Objekt‑Variablen im C#‑Backend‑Code festlegen 2. VTL‑Template‑Code &#38; Render‑Hinweise 1. $pTest.getMyName() ✅ Velocity Aufruf parameterloser Methoden: Klammern () können weggelassen werden, $pTest.getMyName ist gleichbedeutend mit $pTest.getMyName() ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">1. Backend‑Code der Person‑Entität (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">//Parameterloser Konstruktor</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">//Konstruktor mit Parametern</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">//Parameterlose Instanzmethode</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">//Mehrparameter‑Instanzmethode</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">Objekt‑Variablen im C#‑Backend‑Code festlegen</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">2. VTL‑Template‑Code &amp; Render‑Hinweise</h4>


<pre class="wp-block-code"><span><code class="hljs language-php">Methodenaufruf&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>Aufruf der <strong>parameterlosen Objekt‑Methode</strong> <code>getMyName()</code></li>



<li>Rückgabewert <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;" /> Velocity Aufruf parameterloser Methoden: Klammern <code>()</code> können weggelassen werden, <code>$pTest.getMyName</code> ist gleichbedeutend mit <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>Methode mit zwei String‑Parametern aufrufen</li>



<li>VTL wertet zuerst <code>$a</code>, <code>$b</code> aus und übergibt die Werte <code>"hello"</code>, <code>"foxdevelop"</code></li>



<li>Gibt das verkettete Ergebnis zurück: <code>hellofoxdevelop</code></li>
</ul>



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



<ol class="wp-block-list">
<li><strong>Methodennamen beachten Groß‑/Kleinschreibung</strong><br>C# <code>getMyName()</code> ≠ <code>GetMyName()</code>, das Template muss exakt zur Quellcode‑Schreibweise passen.</li>



<li><strong>Variablen direkt übergeben</strong><br>Keine zusätzlichen Anführungszeichen, <code>$pTest.JoinStr($a,$b)</code> ist korrekt; vermeide <code>$pTest.JoinStr("$a","$b")</code> (übergibt den Literal‑String „$a“)</li>



<li><strong>Eigenschaft vs. Methode unterscheiden</strong></li>
</ol>



<ul class="wp-block-list">
<li><code>$pTest.Name</code> → Zugriff auf Eigenschaft (getter)</li>



<li><code>$pTest.getMyName()</code> → Methodenaufruf</li>
</ul>



<ol class="wp-block-list">
<li><strong>Rückgabewerte werden automatisch ausgegeben</strong><br>Schreibe im Template einfach <code>$Objekt.Methode()</code>, Velocity gibt den Rückgabewert automatisch aus. Nutze <code>#set</code> zum Auffangen des Ergebnisses ohne Ausgabe:</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">3. Finale Seiten‑Render‑Ausgabe</h4>


<pre class="wp-block-code"><span><code class="hljs">Methodenaufruf
Tom;

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


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



<p class="wp-block-paragraph">Erweiterungsmethoden</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/de/2026/08/14/erweiterungsmethoden/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ergänzung zu Variablengrenzen</title>
		<link>https://www.foxdevelop.com/de/2026/08/14/ergaenzung-zu-variablengrenzen/</link>
					<comments>https://www.foxdevelop.com/de/2026/08/14/ergaenzung-zu-variablengrenzen/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 03:32:35 +0000</pubDate>
				<category><![CDATA[NVelocity-Tutorial]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8502</guid>

					<description><![CDATA[Variablen‑Voreinstellung：#set ($valok = "hello foxdevelop") Variablen‑Grenze ${} und Zugriffsunterschied mit . Code Ergebnis Erläuterung $valok hello foxdevelop Einfache Variablenausgabe $valok.com hello foxdevelop.com Velocity versucht Eigenschaft/Methode cn des Objekts valok aufzurufen; ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Variablen‑Voreinstellung：<code>#set ($valok = "hello foxdevelop")</code></p>



<h4 class="wp-block-heading">Variablen‑Grenze <code>${}</code> und Zugriffsunterschied mit <code>.</code></h4>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Code</th><th>Ergebnis</th><th>Erläuterung</th></tr></thead><tbody><tr><td><code>$valok</code></td><td>hello <code>foxdevelop</code></td><td>Einfache Variablenausgabe</td></tr><tr><td><code>$valok.</code>com</td><td>hello <code>foxdevelop</code>.com</td><td>Velocity versucht Eigenschaft/Methode <code>cn</code> des Objekts <code>valok</code> aufzurufen; der String hat keine Methode <code>cn</code>, <strong>Variable plus Suffix wird unverändert ausgegeben</strong></td></tr><tr><td><code>${valok}.com</code></td><td>hello <code>foxdevelop</code>.com</td><td><code>{}</code> fixiert die Variablengrenze. Nach der Auswertung von <code>valok</code> wird der Text <code>.com</code> angehängt (empfohlene Schreibweise)</td></tr><tr><td><code>$!valok.com</code></td><td>hello<code>foxdevelop</code>.com</td><td>Stiller Verweis <code>$!</code>: verhält sich wie <code>$valok</code> bei vorhandener Variable; gibt leeren String statt rohem <code>$xxx</code> aus, falls die Variable fehlt</td></tr><tr><td><code>${valok.com}</code></td><td><strong>leer</strong></td><td>Versuch, Eigenschaft <code>valok.com</code> zu lesen. Der String besitzt keine Eigenschaft <code>com</code>, Variable ist nicht vorhanden. Nutze <code>$!{valok.com}</code> für leere Ausgabe</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;" /> Variable + Suffix anhängen<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;" /> Zugriff auf Eigenschaft cn des Objekts valok</p>



<h4 class="wp-block-heading">Einfache / Doppelte Anführungszeichen &amp; Variablen‑Verklebung</h4>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Code</th><th>Ergebnis</th><th>Erläuterung</th></tr></thead><tbody><tr><td><code>what$valok</code></td><td>whathello <code>foxdevelop</code></td><td>Direkte Verkettung, Velocity erkennt die Variablengrenze automatisch</td></tr><tr><td><code>what$"valok"</code></td><td>what$&#8220;valok&#8220;</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;" /> Ungültige Syntax. Nach <code>$</code> darf kein Anführungszeichen folgen, Variable wird nicht geparst</td></tr><tr><td><code>what"$valok"</code></td><td>what&#8220;hello <code>foxdevelop</code>&#8222;</td><td>Anführungszeichen sind nur einfache Zeichen im Template, sie lösen keine String‑Auswertung aus; Variable wird normal aufgelöst</td></tr><tr><td><code>what'$valok'</code></td><td>what&#8217;hello <code>foxdevelop</code>&#8218;</td><td>Gleiches Verhalten, einfache Anführungszeichen sind Literalzeichen</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;" /> Variable nicht erkennbar! Velocity interpretiert <code>valokwhat</code> als kompletten Variablennamen und gibt rohen Text aus, wenn er fehlt</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;" /> Geschweifte Klammern fixieren die Grenze, löst das Problem von Variable angehängt an Text</td></tr></tbody></table></figure>



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



<ol class="wp-block-list">
<li><strong>Nutze immer <code>${Variablenname}</code>, wenn Variable an Text angrenzt</strong><br>Falsch：<code>$valokwhat</code>；Richtig：<code>${valok}what</code></li>



<li><strong>Zum Anhängen von Text: <code>${valok}.cn</code> schreiben, nicht <code>${valok.cn}</code></strong></li>



<li><strong><code>$!Variable</code> stiller Verweis</strong>: gibt leer aus, wenn Variable fehlt, statt <code>$xxx</code> anzuzeigen</li>



<li><strong>Anführungszeichen im Template‑HTML sind einfache Zeichen</strong>；<strong>Nur innerhalb von #set‑Zuweisungen</strong> verhalten sich einfache (keine Variablenauswertung) und doppelte Anführungszeichen (Variablen auflösen) unterschiedlich</li>
</ol>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">#set($a = "$valok") // Doppelte Anführungszeichen: Variable auflösen, a=hello bamn</span>
<span class="hljs-comment">#set($a = '$valok') // Einfache Anführungszeichen: keine Auflösung, a=$valok</span></code></span></pre>


<p class="wp-block-paragraph">Ergänzung zu Variablengrenzen</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/de/2026/08/14/ergaenzung-zu-variablengrenzen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Über Sammlungen iterieren</title>
		<link>https://www.foxdevelop.com/de/2026/08/14/ueber-sammlungen-iterieren/</link>
					<comments>https://www.foxdevelop.com/de/2026/08/14/ueber-sammlungen-iterieren/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 03:21:31 +0000</pubDate>
				<category><![CDATA[NVelocity-Tutorial]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8486</guid>

					<description><![CDATA[Velocity #foreach – Iterieren über Sammlungen &#38; Objekte 1. Iterieren über eine String‑Liste C#‑Backend‑Code Velocity‑Template‑Code Ausgabeergebnis: Jeder String der Liste wird in einer Schleife ausgelesen und mit Zeilenumbruch ausgegeben. Syntaxerklärung ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Velocity #foreach – Iterieren über Sammlungen &amp; Objekte</p>



<h4 class="wp-block-heading">1. Iterieren über eine String‑Liste</h4>



<h5 class="wp-block-heading">C#‑Backend‑Code</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">Velocity‑Template‑Code</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">Ausgabeergebnis: Jeder String der Liste wird in einer Schleife ausgelesen und mit Zeilenumbruch ausgegeben.</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">Syntaxerklärung</h5>



<p class="wp-block-paragraph"><code>#foreach(Schleifenvariable in Sammlung)</code> startet die Schleife, <code>#end</code> beendet sie.</p>



<h4 class="wp-block-heading">2. Iterieren über Liste benutzerdefinierter Entitätsklassen</h4>



<h5 class="wp-block-heading">1. Person‑Entität (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. Liste im Backend zusammenbauen</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. Eigenschaftszugriff im Template</h5>



<p class="wp-block-paragraph">Template‑Code:</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>Daten können nicht gelesen werden! Fehler oder leere Ausgabe</strong></p>



<h4 class="wp-block-heading">Grundlegendes Funktionsprinzip</h4>



<p class="wp-block-paragraph">Regel für den Zugriff auf Objekteigenschaften in Velocity :<br><code>$per.xxx</code> sucht automatisch nach der <strong>öffentlichen Get‑Methode <code>GetXxx()</code></strong></p>



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



<li><code>$per.age</code> → versucht <code>per.getAge()</code> aufzurufen</li>
</ul>



<p class="wp-block-paragraph">Deine Entität:</p>



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



<li><strong>Öffentliche Eigenschaften mit Großbuchstaben am Anfang: <code>Name</code>, <code>Age</code></strong>, zugehörige Methoden <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;" />Korrekte Template‑Schreibweise:</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">Hinweis: Bei C#‑Konventionen beginnen Eigenschaften mit Großbuchstaben; Java‑Entitätseigenschaften sind üblicherweise klein geschrieben. Das ist eine häufige Fallgrube bezüglich Groß‑/Kleinschreibung für Einsteiger.</p>
</blockquote>



<h4 class="wp-block-heading">3. Eingebaute nützliche Variablen von #foreach</h4>



<p class="wp-block-paragraph">Innerhalb der Schleife stehen diese Variablen direkt zur Verfügung:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Variable</th><th>Bedeutung</th></tr></thead><tbody><tr><td><code>$foreach.index</code></td><td>Aktueller Index, <strong>beginnt bei 0</strong></td></tr><tr><td><code>$foreach.count</code></td><td>Aktuelle laufende Nummer, <strong>beginnt bei 1</strong></td></tr><tr><td><code>$foreach.first</code></td><td>Gibt an, ob es sich um den ersten Datensatz handelt (Boolean‑Wert)</td></tr><tr><td><code>$foreach.last</code></td><td>Gibt an, ob es sich um den letzten Datensatz handelt (Boolean‑Wert)</td></tr></tbody></table></figure>



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


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


<h4 class="wp-block-heading">4. Tabellendarstellung</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">Zusammenfassung</h4>



<ol class="wp-block-list">
<li><code>#foreach(Variable in Sammlung)</code> + <code>#end</code> ist die Standardschleife von Velocity;</li>



<li>Bei normaler List‑Iteration gibst du <code>$Variable</code> direkt aus;</li>



<li>Iterieren über Entitätsobjekte: <code>$Objekt.Eigenschaftsname</code> <strong>Groß‑/Kleinschreibung der öffentlichen Eigenschaften beachten</strong>, niemals auf private Felder zugreifen;</li>



<li>Bei C#‑Entitäten empfiehlt es sich, Eigenschaften durchgängig mit großem Anfangsbuchstaben zu schreiben und dies auch im Template einzuhalten;</li>



<li>Wenn Daten leer angezeigt werden, prüfe zuerst <strong>Groß‑/Kleinschreibung der Eigenschaften und Vorhandensein des get‑Accessors</strong>.</li>
</ol>



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



<p class="wp-block-paragraph">Über Sammlungen iterieren</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/de/2026/08/14/ueber-sammlungen-iterieren/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kommentare</title>
		<link>https://www.foxdevelop.com/de/2026/08/14/kommentare/</link>
					<comments>https://www.foxdevelop.com/de/2026/08/14/kommentare/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 03:12:14 +0000</pubDate>
				<category><![CDATA[NVelocity-Tutorial]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8470</guid>

					<description><![CDATA[1. Unterschiede bei Template‑Kommentaren Syntax Typ Eigenschaften &#60;!-- HTML‑Kommentar --&#62; Nativer HTML‑Kommentar Wird im finalen Quellcode der Webseite ausgegeben, im Browser‑Quellcode sichtbar ## Einzeiliger Kommentar Velocity‑Einzeilkommentar Nur vom Engine erkannt, ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">1. Unterschiede bei Template‑Kommentaren</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Syntax</th><th>Typ</th><th>Eigenschaften</th></tr></thead><tbody><tr><td><code>&lt;!-- HTML‑Kommentar --&gt;</code></td><td>Nativer HTML‑Kommentar</td><td><strong>Wird im finalen Quellcode der Webseite ausgegeben</strong>, im Browser‑Quellcode sichtbar</td></tr><tr><td><code>## Einzeiliger Kommentar</code></td><td>Velocity‑Einzeilkommentar</td><td>Nur vom Engine erkannt, <strong>nicht auf der Seite ausgegeben</strong>, gültig bis Zeilenende</td></tr><tr><td><code>#* Mehrzeiliger Kommentarinhalt *#</code></td><td>Velocity‑Mehrzeilkommentar</td><td>Unterstützt Zeilenumbrüche, <strong>nicht auf der Seite ausgegeben</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">Entwicklungshinweis: Nutze für fachliche Code‑Kommentare vorzugsweise <code>##</code> / <code>#* *#</code>, damit Kommentare nicht im Seitenquellcode auftauchen.</p>
</blockquote>



<h3 class="wp-block-heading">2. Regeln für Variablennamen</h3>



<p class="wp-block-paragraph">Offizielle Grundregeln zur Namensgebung</p>



<ol class="wp-block-list">
<li>Das erste Zeichen einer Variable <strong>muss ein Buchstabe sein</strong> (a‑z / A‑Z)</li>



<li>Erlaubte Folgezeichen: Buchstaben, Ziffern <code>0‑9</code>, Unterstrich <code>_</code>, Bindestrich <code>-</code></li>
</ol>



<h4 class="wp-block-heading">Bindestrich <code>-</code> sorgt für Operator‑Mehrdeutigkeit</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">Bei der Ausführung tritt folgender Fehler auf: <code>Encountered "name" ... Was expecting one of:</code><br><strong>Grund: Velocity interpretiert <code>-</code> als Subtraktionsoperator!</strong><br>Der Engine parst es als <code>$name - d</code>, also Variable <code>$name</code> minus Variable <code>d</code> und erzeugt damit einen Syntaxkonflikt.</p>



<p class="wp-block-paragraph">Zwei Lösungsansätze:</p>



<ol class="wp-block-list">
<li><strong>Empfohlen: Benennung mit Unterstrich</strong> (keine Mehrdeutigkeit, gängige Konvention)</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>Variablengrenze mit geschweiften Klammern festlegen</strong> (unterstützt Namen mit Bindestrich)</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">Gültige / ungültige Beispiele im Vergleich</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;" /> gültig</span>
<span class="hljs-comment">#set($name_d = "Unterstrich")</span>
<span class="hljs-comment">#set($name12d = "Buchstabe gefolgt von Zahlen")</span>
<span class="hljs-comment">#set(${name-1_2d} = "Bindestrich erfordert geschweifte Klammern")</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;" /> Direkter Bindestrich ohne Klammern → Parse‑Fehler</span>
<span class="hljs-comment">#set($name-d = "Fehler!")</span>
<span class="hljs-comment">#set($name-1_2d = "Fehler!")</span></code></span></pre>


<h3 class="wp-block-heading">3. Schreibregeln für die #set‑Syntax</h3>



<p class="wp-block-paragraph">Standard‑Schreibweise (Leerzeichen um Klammern sind flexibel, einheitlicher Stil empfohlen)</p>


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


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Zeichenketten müssen in doppelte Anführungszeichen gesetzt werden. Leerzeichen um das Gleichheitszeichen verbessern die Lesbarkeit.</p>
</blockquote>



<p class="wp-block-paragraph">Kommentare</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/de/2026/08/14/kommentare/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Template‑Wiederverwendung</title>
		<link>https://www.foxdevelop.com/de/2026/08/14/template-wiederverwendung/</link>
					<comments>https://www.foxdevelop.com/de/2026/08/14/template-wiederverwendung/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 02:57:46 +0000</pubDate>
				<category><![CDATA[NVelocity-Tutorial]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8454</guid>

					<description><![CDATA[1. Kernfunktion Die Velocity‑Template‑Engine realisiert Wiederverwendung von Templates mit #include / #parse.Wiederkehrende Seitenteile wie die Kopf‑Navigation _head.htm oder der Fußbereich mit Copyright‑Hinweis _footer.htm werden in separate Untertemplates ausgelagert und in ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">1. Kernfunktion</h3>



<p class="wp-block-paragraph">Die Velocity‑Template‑Engine realisiert <strong>Wiederverwendung von Templates</strong> mit <code>#include</code> / <code>#parse</code>.<br>Wiederkehrende Seitenteile wie die Kopf‑Navigation <code>_head.htm</code> oder der Fußbereich mit Copyright‑Hinweis <code>_footer.htm</code> werden in separate Untertemplates ausgelagert und in Seiten eingebunden. Dadurch wird doppelter HTML‑Code vermieden.</p>



<h3 class="wp-block-heading">2. Wesentliche Unterschiede</h3>



<h4 class="wp-block-heading">1. <code>#include("Dateipfad")</code></h4>



<p class="wp-block-paragraph"><strong>Gibt den Dateiinhalt unverändert aus, ohne Velocity‑Variablen (<code>$!{xxx}</code>) im Untertemplate auszuwerten</strong></p>



<ul class="wp-block-list">
<li><code>$!{testinclude}</code> im Untertemplate wird nicht gerendert, der Text <code>$!{testinclude}</code> wird wörtlich ausgegeben</li>



<li>Unterstützt das Einbinden <strong>mehrerer Dateien auf einmal</strong>: <code>#include("a.htm","b.htm")</code></li>



<li>Geeignet für: statisches HTML ohne jegliche VTL‑Variablen</li>
</ul>



<h4 class="wp-block-heading">2. <code>#parse("Dateipfad")</code></h4>



<p class="wp-block-paragraph"><strong>Lädt das Untertemplate und wertet die gesamte Velocity‑Syntax aus</strong>. Vom Elterntemplate übergebene Variablen funktionieren im Untertemplate.</p>



<ul class="wp-block-list">
<li><code>$!{testinclude}</code> im Untertemplate liest Kontext‑Variablen und ersetzt diese durch Werte aus dem Backend‑Code</li>



<li><strong>Akzeptiert nur einen einzelnen Dateipfad</strong>; mehrere gleichzeitige Einbindungen sind nicht möglich</li>



<li>Geeignet für: gemeinsame Kopf‑ und Fußtemplates mit <strong>Variablen</strong> (Seitentitel, dynamische Copyright‑Texte usw.)</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Auszug aus deinen Notizen:<br><code>#include fügt den Quelltext des Untertemplates unverändert ein ohne Auswertung, #parse führt die Syntaxauswertung durch</code></p>
</blockquote>



<h3 class="wp-block-heading">3. Praxisbeispiel</h3>



<h4 class="wp-block-heading">1. Backend‑Code (.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">"Text aus Untertemplate:"</span>);</code></span></pre>


<h4 class="wp-block-heading">2. Inhalt des Untertemplates <code>_footer.htm</code></h4>


<pre class="wp-block-code"><span><code class="hljs">Copyright‑Hinweis $!{testinclude}</code></span></pre>


<h5 class="wp-block-heading">Fall ① mit <code>#include("./themes/default/_footer.htm")</code></h5>



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


<pre class="wp-block-code"><span><code class="hljs">Copyright‑Hinweis $!{testinclude}</code></span></pre>


<p class="wp-block-paragraph">Die Variable wird nicht ausgewertet, der Platzhalter wird wörtlich angezeigt.</p>



<h5 class="wp-block-heading">Fall ② mit <code>#parse("./themes/default/_footer.htm")</code></h5>



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


<pre class="wp-block-code"><span><code class="hljs">Copyright‑Hinweis Text aus Untertemplate:</code></span></pre>


<p class="wp-block-paragraph">Die Variable wird korrekt aufgelöst. Deshalb wird in Projekten für gemeinsame Kopf‑ und Fußbereiche <code>#parse</code> bevorzugt verwendet.</p>



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



<h3 class="wp-block-heading">4. Empfohlene Einsatzbereiche</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Anweisung</th><th>Einsatzfall</th></tr></thead><tbody><tr><td><code>#include</code></td><td>Statische Ressourcen, Klartext, HTML‑Fragmente ohne Variablenauswertung</td></tr><tr><td><code>#parse</code></td><td>Gemeinsame Kopf‑, Fuß‑ und Seitenleisten; Templates mit <code>$‑Variablen</code>, <code>#if</code> und weiterer VTL‑Syntax</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;" /> Entwicklungsrichtlinie:<br>Verwende für gemeinsame Komponenten mit potenziell dynamischen Werten (Navigation, Copyright‑Bereich) durchgängig <code>#parse</code>. Für rein statische Text‑ und Stilfragmente nutze <code>#include</code>.</p>



<p class="wp-block-paragraph">Template‑Wiederverwendung</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/de/2026/08/14/template-wiederverwendung/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Variablen im Template festlegen</title>
		<link>https://www.foxdevelop.com/de/2026/08/14/variablen-im-template-festlegen/</link>
					<comments>https://www.foxdevelop.com/de/2026/08/14/variablen-im-template-festlegen/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 02:37:48 +0000</pubDate>
				<category><![CDATA[NVelocity-Tutorial]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8440</guid>

					<description><![CDATA[Bisher wurden Variablen im C#‑Code‑Behind definiert und danach in Templates verwendet. Man kann Variablen aber auch direkt im Template über die set‑Anweisung festlegen. 1. Variablen definieren mit #set() Zwei Möglichkeiten ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Bisher wurden Variablen im C#‑Code‑Behind definiert und danach in Templates verwendet. Man kann Variablen aber auch direkt im Template über die set‑Anweisung festlegen.</p>



<h3 class="wp-block-heading">1. Variablen definieren mit <code>#set()</code></h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Zwei Möglichkeiten zur Variablendefinition:<br>Methode 1: Variablen im Backend‑Code (C#/Java) vorab definieren und im Template auslesen;<br>Methode 2: <strong>Variablen direkt im Template mit <code>#set()</code> festlegen</strong> (Hauptthema dieser Lektion)</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(Variable = Wert)</code> unterstützt Zeichenketten, Zahlen, Arrays, Objekteigenschaften und Zuweisungen aus anderen Variablen</li>



<li>Schwache Typisierung; es ist keine Typdeklaration nötig</li>
</ul>



<h3 class="wp-block-heading">2. Zwei Schreibweisen und Regeln für die Variablenausgabe</h3>



<h4 class="wp-block-heading">2.1 Grundformen</h4>



<ul class="wp-block-list">
<li><code>$name</code>: Existiert die Variable nicht, wird der Text <code>$name</code> unverändert ausgegeben</li>



<li><code>$!name</code>: <strong>Stille Ausgabe</strong>; gibt leeren Inhalt aus, falls die Variable fehlt (empfohlen, um fremde <code>$xxx</code>‑Texte auf der Seite zu vermeiden)</li>



<li>Empfohlene Standardschreibweise: <strong><code>${name}</code></strong> (geschweifte Klammern grenzen den Variablennamen klar ab)</li>
</ul>



<h4 class="wp-block-heading">2.2 Beispiel für Abgrenzungsprobleme</h4>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">#set($name = "hello")</span>
$namehello     × Der Motor interpretiert es als Variable $namehello und findet nichts
${name}hello   √ Korrekt: löst $name auf und hängt den Text hello an</code></span></pre>


<h3 class="wp-block-heading">3. Einzeilige Kommentare <code>##</code></h3>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">## Dies ist ein Kommentar, er erscheint nicht im fertigen Output</span>
<span class="hljs-comment">#set($name = "test") ## Kommentare am Zeilenende sind ebenfalls erlaubt</span></code></span></pre>


<ol class="wp-block-list">
<li>Kommentare werden<strong>nicht in die gerenderte Seite übernommen</strong>;</li>



<li>Sie sind auch im Quelltext der Seite im Browser nicht sichtbar (werden schon bei der Template‑Verarbeitung verworfen).</li>
</ol>



<h3 class="wp-block-heading">4. Von #set unterstützte Zuweisungstypen</h3>


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

<span class="hljs-comment">## Variable einer anderen Variable zuweisen</span>
<span class="hljs-comment">#set($obj= $name)</span>

<span class="hljs-comment">## Objekteigenschaften belegen</span>
<span class="hljs-comment">#set($obj.Friend = "monica")</span>
<span class="hljs-comment">#set($obj.Blame = $whitehouse.Leak)</span>

<span class="hljs-comment">## Methode aufrufen und Rückgabewert zuweisen</span>
<span class="hljs-comment">#set($obj.Plan = $spindoctor.weave($web))</span>

<span class="hljs-comment">## Zahlenzuweisung</span>
<span class="hljs-comment">#set($obj.Number = 123)</span>

<span class="hljs-comment">## Array‑Zuweisung</span>
<span class="hljs-comment">#set($obj.Say = &#91;"Not", $my, "fault"])</span></code></span></pre>


<h3 class="wp-block-heading">5. Sonderregeln bei nicht vorhandenen Variablen</h3>


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


<p class="wp-block-paragraph">Wenn die Template‑Engine eine Variable nicht auflösen kann:</p>



<ul class="wp-block-list">
<li>Normale Schreibweise <code>$sadfsdfsd</code>: Gibt den Text <code>$sadfsdfsd</code> wörtlich aus</li>



<li>Mit <code>$!sadfsdfsd</code>: Gibt eine leere Zeichenkette zurück, falls die Variable fehlt</li>
</ul>



<p class="wp-block-paragraph">Variablen im Template festlegen</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/de/2026/08/14/variablen-im-template-festlegen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Grundlegende Vorlagensyntax</title>
		<link>https://www.foxdevelop.com/de/2026/08/14/grundlegende-vorlagensyntax/</link>
					<comments>https://www.foxdevelop.com/de/2026/08/14/grundlegende-vorlagensyntax/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 02:24:46 +0000</pubDate>
				<category><![CDATA[NVelocity-Tutorial]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=8421</guid>

					<description><![CDATA[1. Objekte an Vorlagen übergeben 1.1 PageInfo‑Entitätsklasse Bisher haben wir nur einfache Zeichenketten übergeben. Das ist ineffizient und erschwert die Wartung. Wenn man Daten in Entitätsobjekte verpackt, wird der Code ...]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">1. Objekte an Vorlagen übergeben</h3>



<h4 class="wp-block-heading">1.1 PageInfo‑Entitätsklasse</h4>



<p class="wp-block-paragraph">Bisher haben wir nur einfache Zeichenketten übergeben. Das ist ineffizient und erschwert die Wartung. Wenn man Daten in Entitätsobjekte verpackt, wird der Code deutlich übersichtlicher.</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>Privates Feld <code>IsShowImage</code>, nach außen über die Eigenschaft <strong><code>IsShowImage1</code></strong> verfügbar</li>



<li>Zugriff in der Vorlage: <code>$info.IsShowImage1</code></li>
</ul>



<h4 class="wp-block-heading">1.2 Kontextdaten füllen</h4>


<pre class="wp-block-code"><span><code class="hljs language-cs"><span class="hljs-comment">//Vorlagen‑Kontext‑Container</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">//Objekt pi unter dem Schlüssel info im Kontext ablegen</span>
context.Put(<span class="hljs-string">"info"</span>,pi);

<span class="hljs-comment">//Beispiel für String‑Variable</span>
context.Put(<span class="hljs-string">"infotitle"</span>,<span class="hljs-string">"Hallo"</span>);</code></span></pre>


<p class="wp-block-paragraph"><code>context.Put("Schlüsselname",Daten)</code>：Gibt Daten an die Vorlage weiter, die Vorlage liest sie über <code>$Schlüsselname</code> aus.</p>



<h3 class="wp-block-heading">2. Wichtige Velocity‑Vorlagensyntax</h3>



<h4 class="wp-block-heading">2.1 Direktiv‑Zeichen <code>#</code></h4>



<p class="wp-block-paragraph">Anweisungen, die mit <code>#</code> beginnen, sind Direktiven. Häufig verwendet:<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">Beispiel für bedingte Darstellung:</p>



<p class="wp-block-paragraph">Bereiten Sie zwei Bilddateien vor und legen Sie diese unter Contents/Images im Website‑Stammordner ab. Über IsShowImage1 steuern Sie, welches Bild angezeigt wird.</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">Logik: Zeigt a.gif bei <code>IsShowImage1=true</code>, sonst b.gif an</p>



<h4 class="wp-block-heading">2.2 Variablen‑Zeichen <code>$</code></h4>



<ul class="wp-block-list">
<li><code>$Variablenname</code>：Gibt den Variablenwert aus</li>



<li><code>${Variablenname}</code>：<strong>Variablenbegrenzung</strong> (wichtig!)</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Anwendungsfall: Text folgt direkt auf eine Variable, die Engine kann die Variable‑Grenze nicht erkennen.</p>
</blockquote>


<pre class="wp-block-code"><span><code class="hljs language-php">Falsche Schreibweise: $infotitlefoxdevelop.com
<span class="hljs-keyword">Die</span> Engine interpretiert alles als Variable infotitlefoxdevelop, welche nicht existiert.

Richtige Schreibweise: ${infotitle}foxdevelop.com
<span class="hljs-keyword">Die</span> Engine wertet infotitle als Variable aus und hängt <span class="hljs-keyword">die</span> Zeichenkette foxdevelop.com an</code></span></pre>


<h4 class="wp-block-heading">2.3 Still‑Ausgabe‑Modifikator <code>!</code> → <code>$!Variablenname</code></h4>



<p class="wp-block-paragraph">Standardverhalten: Fehlt die Variable, wird der Text <code>$Variablenname</code> unverändert ausgegeben<br><code>$!Variablenname</code>：Gibt Leertext aus, wenn Variable fehlt oder null ist; das‑$‑Zeichen wird nicht ausgegeben</p>



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



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Syntax</th><th>Variable vorhanden(Wert=&#8220;Hallo&#8220;)</th><th>Variable fehlt</th></tr></thead><tbody><tr><td><code>$infotitle</code></td><td>Hallo</td><td><code>$infotitle</code></td></tr><tr><td><code>$!infotitle</code></td><td>Hallo</td><td>(leer, keine Ausgabe)</td></tr><tr><td><code>${infotitle}</code></td><td>Hallo</td><td><code>${infotitle}</code></td></tr><tr><td><code>$!{infotitle}</code></td><td>Hallo</td><td>leer</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Vollständiger Testcode:</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">Zusammenfassung</h3>



<ol class="wp-block-list">
<li>Wenn Text hinter eine Variable angehängt wird, immer mit <code>${Variable}</code> umschließen</li>



<li>In Produktivumgebungen bevorzugt <code>$!{Variablenname}</code> verwenden, damit bei Null‑Werten kein rohes <code>$xxx</code> das Layout zerstört</li>



<li>Bei <code>#if</code>‑Prüfung auf boolesche Eigenschaften direkt <code>#if($info.IsShowImage1)</code> schreiben, <code>==true</code> ist überflüssig</li>
</ol>



<p class="wp-block-paragraph">Grundlegende Vorlagensyntax</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/de/2026/08/14/grundlegende-vorlagensyntax/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Einführung in NVelocity</title>
		<link>https://www.foxdevelop.com/de/2026/08/01/einfuehrung-in-nvelocity/</link>
					<comments>https://www.foxdevelop.com/de/2026/08/01/einfuehrung-in-nvelocity/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Sat, 01 Aug 2026 12:50:59 +0000</pubDate>
				<category><![CDATA[NVelocity-Tutorial]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=7133</guid>

					<description><![CDATA[Eine Template-Engine für die .NET-Plattform, die als .NET-Port der Java-Velocity-Implementierung entstanden ist. Vorstellung Weit verbreitet in ASP.NET-Projekten;Für ASP.NET MVC steht standardmäßig die Razor-Template-Engine zur Verfügung; Viele Entwickler setzen auf NVelocity, ...]]></description>
										<content:encoded><![CDATA[<p>Eine Template-Engine für die .NET-Plattform, die als .NET-Port der Java-Velocity-Implementierung entstanden ist.</p>


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



<p class="wp-block-paragraph">Weit verbreitet in ASP.NET-Projekten;<br>Für ASP.NET MVC steht standardmäßig die Razor-Template-Engine zur Verfügung;</p>



<p class="wp-block-paragraph">Viele Entwickler setzen auf NVelocity, wenn herkömmliche <code>.aspx</code>-Projekte um das MVC-Muster erweitert werden sollen.</p>



<p class="wp-block-paragraph">NVelocity wird nicht mehr weiterentwickelt und kommt nur noch in alten .NET Framework-Projekten zum Einsatz. Bei neuen Projekten empfehlen sich moderne Template-Engines wie Razor oder Handlebars.NET.</p>



<p class="wp-block-paragraph">Zuordnung der Versionen zum .NET Framework</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>.NET Framework-Version</th><th>NVelocity-Version</th></tr></thead><tbody><tr><td>.NET 4.0</td><td>1.0 (neueste offizielle Version)</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 ist eine altbewährte Template-Engine für Java mit einer kompakten Syntax, die <code>#</code> und <code>$</code> als Template-Markierungen nutzt. NVelocity übernimmt diese Syntax vollständig;</p>



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



<p class="wp-block-paragraph">Die letzte offizielle Aktualisierung erfolgte im Jahr 2018, die neueste Version ist 1.2.0</p>



<p class="wp-block-paragraph">Sie können den Quellcode unter folgender Adresse herunterladen</p>



<p class="wp-block-paragraph">Das Projekt ist quelloffen und wird auf GitHub gehostet <a href="https://github.com/castleproject/NVelocity/tree/master">castleproject/NVelocity: Castle&#8217;s NVelocity</a></p>



<p class="wp-block-paragraph">Beim offiziellen Download handelt es sich nicht um vorkompilierte DLL-Dateien. Sie können den Quellcode herunterladen und selbst kompilieren oder das Projekt direkt zur Projektmappe Ihrer Anwendung hinzufügen.</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">Öffnen Sie die SLN-Datei mit Visual Studio</p>



<p class="wp-block-paragraph">Die letzte Version basiert auf .NET Core 2.1. Es empfiehlt sich, das Projekt auf .NET 4.8 zu aktualisieren</p>



<p class="wp-block-paragraph">Nach dem Kompilieren finden Sie die DLL-Dateien im Ausgabeverzeichnis</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">Anschließend können Sie die Datei in Ihr anderes ASP.NET Web-Projekt einbinden. Fügen Sie die NVelocity.dll Ihrem Web-Projekt hinzu.</p>



<h4 class="wp-block-heading">Einbindung im Projekt</h4>



<p class="wp-block-paragraph">Fügen Sie dem Projekt die Assembly NVelocity.dll hinzu<br>Hauptvorteil: Mit dieser Template-Engine lassen sich unkompliziert mehrere Webseitenvorlagen (Designwechsel) realisieren</p>



<p class="wp-block-paragraph">Legen Sie im Stammverzeichnis der Webseite einen Ordner namens Themes als Hauptverzeichnis für alle Vorlagen an<br>Erstellen Sie innerhalb von Themes mehrere Unterordner für einzelne Designs, zum Beispiel:</p>



<p class="wp-block-paragraph">Erstellen Sie den Ordner Themes im Webstammverzeichnis als Designverzeichnis</p>



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



<p class="wp-block-paragraph">Erstellen Sie danach einen Ordner default für die Standardvorlage<br>Später können Sie weitere Vorlagenordner wie Themes/blue oder Themes/dark hinzufügen</p>


<pre class="wp-block-code"><span><code class="hljs language-php">Webstammverzeichnis
└── Themes
    ├── <span class="hljs-keyword">default</span>      <span class="hljs-comment"># Dateien des Standarddesigns</span>
    ├── dark         <span class="hljs-comment"># Dateien des dunklen Designs</span>
    └── blue         <span class="hljs-comment"># Dateien des blauen Designs</span></code></span></pre>


<p class="wp-block-paragraph">Zur Laufzeit wird der aktive Designname aus der Konfiguration ausgelesen, woraufhin NVelocity die Vorlagen aus dem passenden Designordner lädt.<br>Der Wechsel der Vorlage funktioniert durch die Änderung des konfigurierten Pfades zum Designordner – der eigentliche Geschäftslogikcode bleibt unverändert.<br>Geeignet für alte ASP.NET WebForm-(aspx)-Projekte zur Umsetzung eines Designwechsels für die Benutzeroberfläche.</p>



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



<p class="wp-block-paragraph">Legen Sie eine neue ASPX-Seite im Webstammverzeichnis an: <code>Register.aspx</code> als Beispiel für den Zugriff.</p>



<p class="wp-block-paragraph">Erstellen Sie im Ordner <code>Themes/default</code> eine Vorlagendatei namens <code>register.htm</code>. Diese Datei dient als NVelocity-Vorlage und enthält HTML-Code sowie Velocity-Syntax.</p>



<p class="wp-block-paragraph">Öffnen Sie <code>Register.aspx</code>, <strong>behalten Sie ausschließlich die Seitenanweisung bei</strong> und entfernen Sie allen übrigen HTML-Inhalt:</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">Die ASPX-Datei übernimmt keine Darstellung des Seiteninhalts mehr, sondern fungiert nur als Einstiegspunkt des Controllers. Der Code-Behind lädt über NVelocity die Vorlage <code>register.htm</code> und gibt den generierten Inhalt aus.</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">Webstammverzeichnis</span>
├─ <span class="hljs-selector-tag">Register</span><span class="hljs-selector-class">.aspx</span>          # <span class="hljs-selector-tag">Zugriffspunkt</span>
├─ <span class="hljs-selector-tag">Register</span><span class="hljs-selector-class">.aspx</span><span class="hljs-selector-class">.cs</span>       # <span class="hljs-selector-tag">Logik</span> <span class="hljs-selector-tag">im</span> <span class="hljs-selector-tag">Code-Behind</span>
└─ <span class="hljs-selector-tag">Themes</span>
    └─ <span class="hljs-selector-tag">default</span>
        └─ <span class="hljs-selector-tag">register</span><span class="hljs-selector-class">.htm</span>   # <span class="hljs-selector-tag">NVelocity-Vorlage</span></code></span></pre>


<p class="wp-block-paragraph">Anschließend schreiben Sie den Code in <code>Register.aspx.cs</code>, um die Vorlage <code>register.htm</code> des aktuellen Designs zu laden, das Datenmodell zu übergeben und abschließend HTML zu generieren.</p>



<p class="wp-block-paragraph">Zum Wechsel des Designs muss nur der Pfad zum Designordner angepasst werden, damit die Datei <code>register.htm</code> aus dem entsprechenden Ordner geladen wird.</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">Öffnen Sie die Code-Behind-Datei <code>Register.aspx.cs</code>. Implementieren Sie die Rendering-Logik für NVelocity innerhalb der Methode <strong>Page_Load</strong>. Die Vorlage wird beim Laden der Seite verarbeitet und ausgegeben.</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">// Hier Code zum Laden der Vorlage und Rendern der Seite mit NVelocity einfügen</span>
        }
    }
}</code></span></pre>


<p class="wp-block-paragraph">Fügen Sie folgenden Code in Page_Load ein</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">//Schritt 1: Instanz der VelocityEngine erstellen</span>
    VelocityEngine ve = <span class="hljs-keyword">new</span> VelocityEngine();

    <span class="hljs-comment">//Schritt 2: Engine-Konfiguration initialisieren</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">// Vorlagen aus Dateien laden</span>
    pros.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, Server.MapPath(<span class="hljs-string">@""</span>)); <span class="hljs-comment">// Stammverzeichnis der Vorlagen</span>
    ve.Init(pros); <span class="hljs-comment">// Engine mit Konfiguration initialisieren</span>

    <span class="hljs-comment">//Schritt 3: Vorlagendatei einlesen</span>
    Template template = ve.GetTemplate(<span class="hljs-string">"themes/default/register.htm"</span>);

    <span class="hljs-comment">//Schritt 4: Kontext erstellen und Variablen an die Vorlage übergeben</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">//Schritt 5: Vorlage mit Daten zusammenführen und HTML rendern</span>
    StringWriter writer = <span class="hljs-keyword">new</span> StringWriter();
    template.Merge(context, writer); <span class="hljs-comment">// Das Ergebnis der Darstellung wird im Writer gespeichert</span>

    <span class="hljs-comment">//Schritt 6: Seite ausgeben</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">Dieser Code liest die HTML-Vorlagendatei, erstellt Variablen und ersetzt die Platzhalter innerhalb der HTML-Datei durch die zugewiesenen Werte.</p>



<ol class="wp-block-list">
<li><strong>Instanziierung VelocityEngine</strong>: Ein eigenständiges Engine-Objekt, abweichend vom globalen statischen Aufruf <code>Velocity.Init()</code>. Es unterstützt separate unabhängige Konfigurationen.</li>



<li><strong>Initialisierung und Konfiguration der Engine</strong></li>
</ol>



<ul class="wp-block-list">
<li><code>RESOURCE_LOADER=file</code>: Legt fest, dass Vorlagen aus lokalen Dateien geladen werden;</li>



<li><code>FILE_RESOURCE_LOADER_PATH</code>: Legt das Stammverzeichnis für die Vorlagensuche fest;</li>



<li><code>ve.Init(pros)</code>: Lädt die Konfiguration und schließt die Initialisierung ab.</li>
</ul>



<ol start="3" class="wp-block-list">
<li><strong>Laden der Vorlage mit <code>GetTemplate()</code></strong>: Liest die Datei <code>themes/default/register.htm</code> ausgehend vom konfigurierten Stammverzeichnis.</li>



<li><strong>Datenkontext VelocityContext</strong>: Mit <code>context.Put(Schlüssel, Wert)</code> werden C#-Variablen an die Vorlage übergeben. Innerhalb der HTM-Datei greifen Sie mit <code>$websiteName</code> und <code>$domainName</code> auf diese Werte zu.</li>



<li><strong>Vorlagen-Rendering per Merge</strong>: Mit <code>template.Merge(Kontext, Ausgabestream)</code> werden Variablen in die Vorlage eingefügt und ein vollständiger HTML-String erzeugt. Der generierte Text wird über einen <code>StringWriter</code> aufgefangen.</li>



<li><strong>Ausgabe mit Response</strong>: Der fertige HTML-Code wird an den Browser gesendet. <code>Replace("\r\n","&lt;br/&gt;")</code> wandelt Zeilenumbrüche des Quellcodes in HTML-Zeilenumbruch-Tags um.</li>
</ol>



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



<p class="wp-block-paragraph">Bearbeiten Sie die Datei <code>register.htm</code> im Designordner</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>
    Webseite: $websiteName <span class="hljs-tag">&lt;<span class="hljs-name">br</span> /&gt;</span>
    Domain: $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">Die beiden Ausdrücke mit $xxxxxxx sind Platzhalter für die im Page_Load erstellten Variablen. Während der Darstellung werden sie automatisch durch die entsprechenden Werte ersetzt.</p>



<ol class="wp-block-list">
<li><strong>Variablenkennzeichnung <code>$Variablenname</code></strong> <code>$websiteName</code> und <code>$domainName</code> sind VTL-Syntax von NVelocity. Im Programmcode werden sie mit <code>context.Put("websiteName", "FoxDevelop")</code> belegt, die Engine ersetzt diese Markierungen beim Rendering:</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">Ergebnis bei Ausführung</p>


<pre class="wp-block-code"><span><code class="hljs language-http"><span class="hljs-attribute">Webseite</span>: FoxDevelop
<span class="hljs-attribute">Domain</span>: foxdevelop.com</code></span></pre>


<p class="wp-block-paragraph">Einführung in NVelocity</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/de/2026/08/01/einfuehrung-in-nvelocity/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
