Added: 
velocity/site/cms/trunk/content/engine/2.1/translations/user-guide_fi.html
URL: 
http://svn.apache.org/viewvc/velocity/site/cms/trunk/content/engine/2.1/translations/user-guide_fi.html?rev=1854714&view=auto
==============================================================================
--- velocity/site/cms/trunk/content/engine/2.1/translations/user-guide_fi.html 
(added)
+++ velocity/site/cms/trunk/content/engine/2.1/translations/user-guide_fi.html 
Sun Mar  3 13:56:00 2019
@@ -0,0 +1,2312 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+
+
+
+
+
+
+
+
+
+
+
+<html>
+  <head>
+    <title>Apache Velocity - Velocity käyttäjän opas</title>
+    <style type="text/css" media="all">
+      @import url("../css/maven-base.css");
+      @import url("../css/maven-theme.css");
+      @import url("../css/site.css");
+    </style>
+    <link rel="stylesheet" href="../css/print.css" type="text/css" 
media="print" />
+    <link rel="alternate" 
href="http://feeds.feedburner.com/ApacheVelocitySiteNews"; 
type="application/rss+xml" title="Apache Velocity - Velocity käyttäjän opas 
News" />
+          <meta name="author" content="Velocity Documentation Team" />
+          <meta name="author" content="John Castura" />
+          <meta name="author" content="Juha Kilpi" />
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+      </head>
+  <body class="composite">
+    <div id="banner">
+                  <a href="../../" id="bannerLeft">
+    
+                                            <img 
src="../images/velocity_project_wide.png" alt="" />
+    
+            </a>
+                          <span id="bannerRight">
+    
+                                            <img 
src="../images/velocity-logo.png" alt="" />
+    
+            </span>
+            <div class="clear">
+        <hr/>
+      </div>
+    </div>
+    <div id="breadcrumbs">
+          
+  
+
+  
+    
+  
+  
+    
+            <div class="xleft">
+          
+          <a href="http://www.apache.org/";>Apache</a>
+              &gt;
+      
+          <a href="../../../">Velocity</a>
+              &gt;
+      
+          <a href="../">Velocity Engine</a>
+                </div>
+            <div class="xright">      <a href="../">Engine</a>
+          |
+          <a href="../../../tools/devel/">Tools</a>
+          |
+          <a href="../../../anakia/devel/">Anakia</a>
+          |
+          <a href="../../../texen/devel/">Texen</a>
+          |
+          <a href="../../../docbook/">DocBook</a>
+          |
+          <a href="../../../dvsl/devel/">DVSL</a>
+          
+  
+
+  
+    
+  
+  
+    
+  </div>
+      <div class="clear">
+        <hr/>
+      </div>
+    </div>
+    <div id="leftColumn">
+      <div id="navcolumn">
+           
+  
+
+  
+    
+  
+  
+    
+                   <h5>Velocity</h5>
+        <ul>
+              
+    <li class="none">
+              <a href="../index.html">General</a>
+        </li>
+              
+    <li class="none">
+              <a href="../overview.html">Overview</a>
+        </li>
+              
+    <li class="none">
+              <a href="../getting-started.html">Getting Started</a>
+        </li>
+              
+    <li class="none">
+              <a href="../webapps.html">Web Applications</a>
+        </li>
+              
+    <li class="none">
+              <a href="../../../download.cgi">Download</a>
+        </li>
+              
+    <li class="none">
+              <a href="http://wiki.apache.org/velocity/VelocityFAQ";>FAQ 
(Wiki)</a>
+        </li>
+          </ul>
+          <h5>Docs</h5>
+        <ul>
+              
+    <li class="none">
+              <a href="../user-guide.html">User Guide</a>
+        </li>
+              
+    <li class="none">
+              <a href="../developer-guide.html">Developer Guide</a>
+        </li>
+              
+    <li class="none">
+              <a href="../vtl-reference-guide.html">VTL Reference</a>
+        </li>
+              
+    <li class="none">
+              <a href="../glossary.html">Glossary</a>
+        </li>
+          </ul>
+          <h5>Developers</h5>
+        <ul>
+              
+    <li class="none">
+              <a href="../license.html">License</a>
+        </li>
+              
+    <li class="none">
+              <a href="../apidocs/index.html">Javadoc</a>
+        </li>
+              
+    <li class="none">
+              <a href="../changes-report.html">Changes</a>
+        </li>
+              
+    <li class="none">
+              <a href="../jira-report.html">Resolved Issues</a>
+        </li>
+              
+    <li class="none">
+              <a href="../upgrading.html">Upgrading</a>
+        </li>
+              
+    <li class="none">
+              <a href="../jar-dependencies.html">Dependencies</a>
+        </li>
+              
+    <li class="none">
+              <a 
href="http://svn.apache.org/viewvc/velocity/engine/trunk/";>Source Code 
Repository</a>
+        </li>
+              
+    <li class="none">
+              <a href="../build.html">Building from Source</a>
+        </li>
+          </ul>
+          <h5>Community</h5>
+        <ul>
+              
+    <li class="none">
+              <a href="http://wiki.apache.org/velocity/";>Wiki</a>
+        </li>
+              
+    <li class="none">
+              <a href="../../../news.html">Recent News</a>
+        </li>
+              
+    <li class="none">
+              <a 
href="http://wiki.apache.org/velocity/PoweredByVelocity";>Powered By Velocity</a>
+        </li>
+              
+    <li class="none">
+              <a 
href="http://wiki.apache.org/velocity/VelocityEditors";>IDE/Editor Plugins</a>
+        </li>
+              
+    <li class="none">
+              <a 
href="http://wiki.apache.org/velocity/PublishedArticlesAndBooks";>Articles and 
Books</a>
+        </li>
+              
+    <li class="none">
+              <a href="http://wiki.apache.org/velocity/GetInvolved";>Get 
Involved</a>
+        </li>
+              
+    <li class="none">
+              <a href="../../../contact.html">Mailing Lists</a>
+        </li>
+          </ul>
+          <h5>Velocity Development</h5>
+        <ul>
+              
+    <li class="none">
+              <a href="http://wiki.apache.org/velocity/RoadMap";>Road Map</a>
+        </li>
+              
+    <li class="none">
+              <a href="http://wiki.apache.org/velocity/CodeStandards";>Coding 
Standards</a>
+        </li>
+              
+    <li class="none">
+              <a 
href="http://wiki.apache.org/velocity/DocumentationGuidelines";>Documentation 
Guidelines</a>
+        </li>
+              
+    <li class="none">
+              <a 
href="https://issues.apache.org/jira/browse/VELOCITY";>Issues</a>
+        </li>
+              
+    <li class="none">
+              <a href="../../../who-we-are.html">Who we are</a>
+        </li>
+          </ul>
+          <h5>Translations</h5>
+        <ul>
+              
+    <li class="none">
+              <a href="http://www.jajakarta.org/velocity/";>Site (Japanese)</a>
+        </li>
+              
+    <li class="none">
+              <strong>User's Guide (Finnish)</strong>
+        </li>
+              
+    <li class="none">
+              <a href="../translations/user-guide_fr.html">User's Guide 
(French)</a>
+        </li>
+              
+    <li class="none">
+              <a href="../translations/user-guide_es.html">User's Guide 
(Spanish)</a>
+        </li>
+          </ul>
+          <h5>Project Documentation</h5>
+        <ul>
+              
+                
+              
+      
+            
+      
+            
+      
+            
+      
+            
+      
+              
+        <li class="collapsed">
+              <a href="../project-info.html">Project Information</a>
+              </li>
+              
+                
+              
+      
+            
+      
+            
+      
+            
+      
+            
+      
+            
+      
+            
+      
+            
+      
+            
+      
+            
+      
+            
+      
+              
+        <li class="collapsed">
+              <a href="../project-reports.html">Project Reports</a>
+              </li>
+          </ul>
+                                             
+                        
+                        
+                        <a class="poweredBy" href="../../../" title="Apache 
Velocity" ><img class="poweredBy" alt="Apache Velocity" 
src="../images/pbv90x30.png" /></a>
+                                
+                        
+                        
+                        <a class="poweredBy" href="../../../rss/news.rss" 
title="Velocity News Feed" ><img class="poweredBy" alt="Velocity News Feed" 
src="../images/feed-icon-24x24.jpg" /></a>
+                    
+       <iframe src="http://www.apache.org/ads/buttonbar.html";
+               style="border-width:0; float: left" frameborder="0" 
scrolling="no"
+               width="135"
+               height="265" ></iframe>
+
+           
+  
+
+  
+    
+  
+  
+    
+        </div>
+    </div>
+    <div id="bodyColumn">
+      <div id="contentBox">
+        <div class="section"><h2><a name="Sisällys"></a>Sisällys</h2>
+<ol type="1"><li><a href="#Tietojatästäoppaasta">Tietoja tästä 
oppaasta</a></li>
+<li><a href="#MikäonVelocity?">Mikä on Velocity?</a></li>
+<li><a href="#MitenvoinkäyttääVelocityä?">Miten voin käyttää 
Velocityä?</a><ol type="1"><li><a href="#Kurakauppaesimerkki">Kurakauppa 
esimerkki</a></li>
+</ol>
+</li>
+<li><a href="#VelocityTemplateLanguage(VTL):Johdanto">Velocity
+Template Language (VTL): Johdanto</a></li>
+<li><a href="#HeiVelocityMaailma!">Hei Velocity Maailma!</a></li>
+<li><a href="#Kommentit">Kommentit</a></li>
+<li><a href="#Viittaukset">Viittaukset</a><ol type="1"><li><a 
href="#Muuttujat">Muuttujat</a></li>
+<li><a href="#Ominaisuudet">Ominaisuudet</a></li>
+<li><a href="#Metodit">Metodit</a></li>
+</ol>
+</li>
+<li><a href="#Muodollinenmerkintä">Muodollinen viittausten merkintä</a></li>
+<li><a href="#Hiljainenviittaustenmerkintä">Hiljainen viittausten 
merkintä</a></li>
+<li><a href="#Kirjaimellisesti">Kirjaimellisesti</a><ol type="1"><li><a 
href="#Dollari">Dollari</a></li>
+<li><a href="#VTLviittaustensuojaaminen">VTL viittausten suojaaminen</a></li>
+</ol>
+</li>
+<li><a href="#Kirjainkoonmuutos">Kirjainkoon muutos</a></li>
+<li><a href="#Ohjeet">Ohjeet</a><ol type="1"><li><a href="#Set">Set</a></li>
+<li><a href="#Tekstivakiot">Tekstivakiot</a></li>
+<li><a href="#If-Elseehtolauseet">If-Else ehtolauseet</a><ol type="1"><li><a 
href="#Relaatio-jaloogisetoperaattorit">Relaatio- ja loogiset
+                operaattorit</a></li>
+</ol>
+</li>
+<li><a href="#Silmukat">Foreach silmukat</a></li>
+<li><a href="#Include">Include</a></li>
+<li><a href="#Parse">Parse</a></li>
+<li><a href="#Stop">Stop</a></li>
+<li><a href="#Velocimakrot">Velocimakrot</a></li>
+</ol>
+</li>
+<li><a href="#VTLohjeidensuojaaminen">VTL ohjeiden suojaaminen</a></li>
+<li><a href="#VTL:Muotoilu">VTL: Muotoilu</a></li>
+<li><a href="#Muitaominaisuuksiajasekalaista">Muita ominaisuuksia ja 
sekalaista</a><ol type="1"><li><a href="#Matematiikka">Matematiikka</a></li>
+<li><a href="#Vaihteluväli(RangeOperator)">Vaihteluväli (Range 
Operator)</a></li>
+<li><a href="#Edistyneetkysymykset:Suojaaminenja!">Edistyneet kysymykset: 
Suojaaminen ja !</a></li>
+<li><a href="#YleistäVelocimakroista">Yleistä Velocimakroista</a></li>
+<li><a href="#Merkkijonojenyhdistäminen">Merkkijonojen yhdistäminen</a></li>
+</ol>
+</li>
+<li><a href="#Palaute">Palaute</a></li>
+</ol>
+</div>
+<div class="section"><h2><a name="Tietoja_tästä_oppaasta"></a>Tietoja 
tästä oppaasta</h2>
+<p>
+    Velocity käyttäjän opas on tarkoitettu sivusuunnittelijoille ja
+    sisällöntuottajille avuksi tutustuttaessa Velocityyn ja sen
+    yksinkertaiseen mutta tehokkaaseen skriptikieleen, Velocity
+    Template Language:en (VTL). Useat tämän oppaan esimerkeistä
+    käsittelevät Velocityn käyttämistä dynaamisen sisällön
+    lisäämiseksi web sivuille, mutta kaikki VTL esimerkit toimivat
+    HTML sivujen lisäksi yhtä hyvin myös muiden sivujen ja sivupohjien
+    kanssa.
+ </p>
+<p>
+    Kiitos että valitsit Velocityn!
+ </p>
+</div>
+<div class="section"><h2><a name="Mikä_on_Velocity"></a>Mikä on 
Velocity?</h2>
+<p>
+    Velocity on javapohjainen sivumoottori (template engine). Sen
+    avulla sivusuunnittelijat voivat viitata java -koodissa
+    määriteltyihin metodeihin. Sivusuunnittelijat voivat työskennellä
+    java ohjelmoijien kanssa samanaikaisesti käyttäen
+    Malli-Näkymä-Ohjain (Model-View-Controller, MVC)
+    suunnittelumallia. MVC mallissa sivusuunnittelijat voivat
+    keskittyä täysin luomaan hyvin suunniteltua sivustoa, ja
+    ohjelmoijat voivat keskittyä koodaamaan ykkösluokan
+    koodia. Velocity erottaa java -koodin web sivuista, tehden
+    sivustosta pitkällä aikavälillä helpommin ylläpidettävän ja
+    antamalla varteenotettavan vaihtoehdon <a 
href="http://java.sun.com/products/jsp/"; class="externalLink">JSP</a>:lle (Java 
Server
+    Pages) ja <a href="http://www.php.net/"; class="externalLink">PHP</a>:lle.
+ </p>
+<p>
+    Velocityä voidaan käyttää web sivujen, SQL:n, PostScriptin ja
+    muunlaisten tulosteiden tuottamiseen sivupohjista (template). Sitä
+    voidaan käyttää joko itsenäisenä työkaluna lähdekoodin ja
+    raporttien luomiseen, tai muihin järjestelmiin integroituna
+    komponenttina. Velocity tarjoaa sivupohjaratkaisun <a 
href="http://java.apache.org/turbine/"; class="externalLink">Turbine</a> web
+    sovelluskehykselle. Yhdessä Velocity ja Turbine tarjoavat
+    sivupohjaratkaisun jonka avulla web sovelluksia voidaan kehittää
+    todellisen MVC -mallin mukaisesti.
+ </p>
+</div>
+<div class="section"><h2><a name="Miten_voin_käyttää_Velocityä"></a>Miten 
voin käyttää Velocityä?</h2>
+<div class="section"><h3><a name="Kurakauppa_esimerkki"></a>Kurakauppa 
esimerkki</h3>
+<p>
+    Oletetaan että olet kuraa myyvän onlinekaupan
+    sivusuunnittelija. Kutsumme kauppaa &quot;Kurakauppa
+    Online&quot;:ksi. Kauppa käy hyvin. Asiakkaat tilaavat vaihtelevia
+    määriä eri kuratyyppejä. He pääsevät tutkimaan tekemiään tilauksia
+    sekä tekemään uusia ostoja kirjautumalla sivullesi käyttäen
+    käyttäjätunnustaan ja salasanaansa. Tällä hetkellä suosittu
+    Terracotta -kura on alennusmyynnissä. Pieni osa asiakkaistasi
+    ostaa säännöllisesti Kirkkaanpunaista Kuraa, joka myös on
+    alennusmyynnissä, mutta pienemmän suosionsa vuoksi yleensä
+    mainittu sivulla hieman syrjässä. Tiedot kustakin asiakkaasta
+    talletetaan tietokantaan, joten eräänä päivänä herää kysymys;
+    Miksipä emme käyttäisi Velocityä kohdentamaan erikoistarjouksia
+    kurasta asiakkaille jotka ovat kiinnostuneita juuri tuosta
+    kuratyypistä?
+   </p>
+<p>
+    Velocityn avulla verkkosivut on helppo personoida kävijöidesi
+    mukaan. Kurakauppa Onlinen sivusuunnittelijana haluat tehdä sivun
+    jonka asiakas näkee kirjauduttuaan järjestelmään.
+   </p>
+<p>
+    Tapaat yrityksesi ohjelmoijat ja sovitte, että muuttuja
+    <em>$asiakas</em> pitää sisällään tiedot parhaillaan kirjautuneena
+    olevasta asiakkaasta. Muuttujassa <em>$kuratTarjouksessa</em> ovat
+    tiedot kuratyypeistä jotka ovat parhaillaan
+    erikoistarjouksessa. <em>$tarjous</em> objektissa on metodeja
+    jotka auttavat mainostamisessa. Tällä kertaa keskitymme vain
+    näihin kolmeen viittaukseen. Muista, että sinun ei tarvitse
+    huolehtia siitä kuinka ohjelmoijat hakevat tarvittavat tiedot
+    tietokannasta, sinun tarvitsee tietää vain että se toimii. Näin
+    pääset tekemään omaa työtäsi ja ohjelmoijat pääsevät tekemään
+    omaansa.
+   </p>
+<p>
+    Voisit lisätä seuraavat VTL lauseen sivulle:
+   </p>
+<div class="source"><pre>
+&lt;HTML&gt;
+&lt;BODY&gt;
+Hei $asiakas.Nimi!
+&lt;table&gt;
+#foreach( $kura in $kuratTarjouksessa )
+   #if ( $asiakas.onOstanut($kura) )
+      &lt;tr&gt;
+        &lt;td&gt;
+          $tarjous.haePromo( $kura )
+        &lt;/td&gt;
+      &lt;/tr&gt;
+   #end
+#end
+&lt;/table&gt;
+</pre>
+</div>
+<p><em>foreach</em> lauseen toiminta kuvataan yksityiskohtaisemmin
+    jäljempänä; tärkeää tässä on tämän lyhyen skriptin tekemä 
vaikutus
+    sivullesi. Kun Kirkkaanpunainen Kura on alennusmyynnissä ja sitä
+    joskus aiemmin ostanut asiakas kirjautuu sisään, asiakas näkee
+    ilmoituksen alennuksesta parhaalla mahdollisella paikalla. Jos
+    toinen, Terracottakuraa ostanut asiakas kirjautuu järjestelmään,
+    ilmoitus Terracottakuran alennusmyynnistä näkyy hänelle
+    ensimmäisenä. Velocity on joustava ja sen käytössä vain
+    mielikuvituksesi on rajana.
+   </p>
+<p>
+    VTL hakemistossa on kuvattu Velocityn kaikki elementit jotka
+    yhdessä antavat käyttöösi tehokkaan ja joustavan työkalun jota
+    tarvitset luodaksesi web sivuistasi dynaamisen. Pääset
+    hyödyntämään Velocityn voimaa jatkuvasti paremmin sitä mukaa kun
+    opit käyttämään näitä elementtejä.
+   </p>
+</div>
+</div>
+<div class="section"><h2><a 
name="Velocity_Template_Language_VTL:_Johdanto"></a>Velocity Template Language 
(VTL): Johdanto</h2>
+<p>
+    Velocityn sivunkuvauskieli (Velocity Template Language, VTL)
+    tarjoaa helpon ja yksinkertaisen keinon liittää dynaamista
+    sisältöä web sivulle. Dynaamisen sisällön käyttäminen pitäisi
+    onnistua nopeasti jopa sellaiselta sivusuunnittelijalta jolla on
+    ohjelmointikokemusta vain vähän, tai ei ollenkaan.
+ </p>
+<p>
+     VTL käyttää <em>viittauksia</em> dynaamisen aineiston lisäämiseen
+     verkkosivulle. Muuttujat ovat yhdentyyppisiä
+     viittauksia. Muuttujat voivat viitata johonkin java -koodissa
+     määriteltyyn, tai niiden arvo voidaan määrittää web -sivulla
+     annetun VTL <em>lauseen</em> avulla. Seuraavassa on esimerkki VTL
+     lauseesta joka voidaan lisätä HTML -dokumenttiin:
+ </p>
+<div class="source"><pre>
+#set( $a = &quot;Velocity&quot; )
+</pre>
+</div>
+<p>
+    Kuten kaikki VTL lauseet (statement), tämäkin lause alkaa <em>#</em>
+    merkillä ja sisältää ohjeen (directive): <em>set</em>. Kun verkkosivun
+    käyttäjä hakee sivun Velocity etsii sivupohjastasi kaikki
+    <em>#</em> -merkit. Sitten se tulkitsee mitkä niistä merkitsevät
+    VTL lausetta, ja mitkä <em>#</em> merkeistä ovat osa sivujesi
+    normaalia HTML -koodia, eivätkä kuulu VTL -koodiin.
+ </p>
+<p><em>#</em> merkkiä seuraa ohje, <em>set</em>. <em>set</em> ohjeen
+    jälkeen tulee suluissa ilmaus (expression), -- yhtälö joka määrittää
+    <em>arvon</em><em>muuttujalle</em>. Muuttuja on ilmaistu
+    vasemmalla ja arvo oikealla puolella. Nämä on erotettu <em>=</em>
+    merkillä.
+ </p>
+<p>
+    Yllä olevassa esimerkissä muuttuja on <em>$a</em> ja arvo on
+    <em>Velocity</em>. Kaikkien viittausten tapaan tämäkin muuttuja
+    alkaa <em>$</em> merkillä. Arvot ovat aina lainausmerkkien
+    sisällä; Velocityssä muuttujien datatyypeistä ei tule
+    sekaannuksia, koska vain merkkijonoja (string) voi antaa
+    muuttujien arvoksi.
+ </p>
+<p>
+    Seuraava nyrkkisääntö voi auttaa ymmärtämään Velocityn toimintaa:
+    <strong>Viittaukset alkavat <em>$</em> merkillä ja niitä käytetään
+    jonkin hakemiseen. Ohjeet alkavat <em>#</em> merkillä ja niitä
+    käytetään jonkin suorittamiseen.</strong></p>
+<p>
+     Yllä olevassa esimerkissä <em>#set</em> -ohjetta käytetään arvon
+     määrittämiseksi muuttujaan. Muuttujaa <em>$a</em> voidaan tämän
+     jälkeen käyttää sivupohjassa tulostamaan &quot;Velocity&quot;.
+ </p>
+</div>
+<div class="section"><h2><a name="Hei_Velocity_Maailma"></a>Hei Velocity 
Maailma!</h2>
+<p>
+    Kun muuttujalle on määritelty arvo, voidaan siihen viitata missä
+    tahansa paikassa HTML dokumenttia. Seuraavassa esimerkissä
+    muuttujalle <em>$foo</em> määritellään arvo. Myöhemmin muuttujaan
+    viitataan.
+ </p>
+<div class="source"><pre>
+&lt;html&gt;
+&lt;body&gt;
+#set( $foo = &quot;Velocity&quot; )
+Hei $foo Maailma!
+&lt;/body&gt;
+&lt;html&gt;
+</pre>
+</div>
+<p>
+    Tuloksena on web sivu jossa lukee &quot;Hei Velocity Maailma!&quot;.
+ </p>
+<p>
+    Jotta VTL lauseet olisivat helpommin luettavissa on suositeltavaa
+    aloittaa jokainen lause uudelta riviltä, vaikkakaan tämä ei ole
+    pakollista. <em>set</em> ohjeeseen palaamme tarkemmin myöhemmin.
+ </p>
+</div>
+<div class="section"><h2><a name="Kommentit"></a>Kommentit</h2>
+<p>
+    Kommenttien avulla sivulle voidaan lisätä aputekstejä jotka eivät
+    tule näkymään sivun tulosteessa. Voit käyttää kommentteja
+    muistuttaaksesi itseäsi jostakin tai selittääksesi muille mitä VTL
+    komennot tekevät, tai mihin tahansa muuhun tarkoitukseen. Alla on
+    esimerkki kommentin käytöstä.
+ </p>
+<div class="source"><pre>
+## Tämä on rivin pituinen kommentti.
+</pre>
+</div>
+<p>
+    Yhden rivin pituinen kommentti alkaa <em>##</em> merkeillä ja
+    loppuu kyseisen rivin lopussa. Jos aiot kirjoittaa usean rivin
+    mittaisen kommentin, ei sinun tarvitse kirjoittaa useita yhden
+    rivin kommentteja. Usean rivin kommentit alkavat <em>#*</em>
+    merkeillä ja loppuvat <em>*#</em> merkkeihin.
+ </p>
+<div class="source"><pre>
+Tämä teksti on kommenttimerkkien ulkopuolella.
+Käyttäjät näkevät tämän tekstin.
+
+#*
+ Monirivinen kommentti alkaa tästä. Käyttäjät eivät näe tätä tekstiä
+ koska Velocityn sivumoottori ei näytä kommenttimerkkien sisällä
+ olevaa tekstiä tulosteessaan.
+*#
+
+Tämä teksti on jälleen kommenttimerkkien ulkopuolella; se on
+näkyvissä.
+
+</pre>
+</div>
+<p>
+    Tässä on muutamia esimerkkejä yksi- ja monirivisten kommenttien
+    toiminnan selvittämiseksi:
+ </p>
+<div class="source"><pre>
+Tämä teksti on näkyvissä. ## Tämä teksti ei ole.
+Tämä teksti on näkyvissä.
+Tämä teksti on näkyvissä. #* Tämä teksti on osa monirivistä kommenttia
+eikä siksi ole näkyvissä. Tämä teksti ei edelleenkään ole näkyvissä
+koska se on kommenttimerkkien sisällä. *# Tämä teksti on
+kommenttimerkkien ulkopuolella, joten se on näkyvissä.
+## Tämä teksti ei ole näkyvissä.
+</pre>
+</div>
+<p>
+    On olemassa vielä kolmaskin kommenttityyppi; VTL kommenttilohko,
+    jota voidaan käyttää mm. dokumentin tekijä- ja versiotietojen
+    tallettamiseen
+ </p>
+<div class="source"><pre>
+#**
+Tämä on VTL kommenttilohko. Lohkoa
+voidaan käyttää esimerkiksi dokumentin
+tekijä- ja versiotietojen
+tallettamiseen:
+@author
+@version 5
+*#
+</pre>
+</div>
+</div>
+<div class="section"><h2><a name="Viittaukset"></a>Viittaukset</h2>
+<p>
+    VTL:ssä on kolme erityyppistä viittausta: muuttujat, ominaisuudet
+    ja metodit. VTL:ää käyttävänä sivusuunnittelijana sinun, ja
+    javapuolta koodaavien ohjelmoijien on sovittava viittausten
+    nimistä, jotta voit käyttää niitä sivupohjissasi.
+ </p>
+<p>
+    Kaikkea viittauksissa olevaa ja niihin määriteltävää tietoa
+    käsitellään tekstityyppisenä. Jos on esimerkiksi määritelty
+    objekti <em>$foo</em> (Integer objekti), Velocity kutsuu objektin
+    <code>.toString()</code> metodia objektin arvon muuntamiseksi
+    tekstityyppiseksi.
+ </p>
+<p><a name="Muuttujat"><strong>Muuttujat</strong></a><br />
+
+
+    Muuttujan lyhyt merkintätapa koostuu ensimmäisenä olevasta &quot;$&quot;
+    merkistä, jonka jälkeen tulee VTL <em>tunniste</em>. VTL
+    tunnisteen on alettava aakkosnumeerisella merkillä (a..z tai
+    A..Z). Muuttujan loput merkit ovat rajoitettu seuraaviin:
+
+ </p>
+<p><ul><li>aakkoset (a .. z, A .. Z)</li>
+<li>numerot (0 .. 9)</li>
+<li>viiva (&quot;-&quot;)</li>
+<li>alaviiva (&quot;_&quot;)</li>
+</ul>
+</p>
+<p>
+    Seuraavassa muutamia esimerkkejä toimivista muuttujaviittauksista:
+ </p>
+<div class="source"><pre>
+$foo
+$kuraLinko
+$kura-linko
+$kura_linko
+$kuraLinko1
+</pre>
+</div>
+<p>
+    Kun VTL viittaa muuttujaan, kuten <em>$foo</em>, muuttuja voi
+    saada arvonsa joko sivupohjassa olevalta <em>set</em> ohjeelta,
+    tai java -koodista. Jos esimerkiksi javamuuttujalla <em>$foo</em>
+    on arvo <em>bar</em> silloin kun sivupohjaa haetaan, <em>bar</em>
+    korvaa kaikki <em>$foo</em> muuttujan esiintymiskohdat web
+    sivulla. Toisaalta jos sivulle lisätään lause
+ </p>
+<div class="source"><pre>
+#set( $foo = &quot;bar&quot; )
+</pre>
+</div>
+<p>
+    Sivun tuloste on sama kaikilla <em>$foo</em> muuttujan
+    esiintymiskohdille jotka tulevat tämän lauseen jälkeen.
+ </p>
+<p><a name="Ominaisuudet"><strong>Ominaisuudet</strong></a><br />
+
+
+    Toinen VTL:n viittaustyyppi ovat ominaisuudet joilla on oma
+    tunnusomainen muotonsa. Lyhyt merkintätapa muodostuu ensimmäisenä
+    olevasta <em>$</em> merkistä, jonka jälkeen tulee VTL tunniste,
+    jota seuraa piste (&quot;.&quot;) ja toinen VTL tunniste. Seuraavassa on
+    esimerkkejä toimivista ominaisuusviittauksista:
+ </p>
+<div class="source"><pre>
+$asiakas.Osoite
+$ostos.Summa
+</pre>
+</div>
+<p>
+    Käsittelemme ensimmäisen esimerkin <em>$asiakas.Osoite</em>
+    tarkemmin. Viittauksella voi olla kaksi merkitystä. Se saattaa
+    tarkoittaa; hae <em>asiakas</em> nimisestä hashtable taulukosta
+    arvo joka on liitetty avaimelle <em>Osoite</em>. Toisaalta
+    <em>$asiakas.Osoite</em> voi myös viitata metodiin (käsittelemme
+    metodeihin viittaavat viittaukset seuraavassa kappaleessa);
+    <em>$asiakas.Osoite</em> saattaa olla lyhennetty muoto
+    viittauksesta <em>$asiakas.getOsoite()</em>. Velocity tulkitsee
+    sivua haettaessa kumpaa näistä vaihtoehdoista tarkoitetaan, ja
+    palauttaa vastaavan arvon.
+ </p>
+<p><a name="Metodit"><strong>Metodit</strong></a><br />
+
+
+    Metodit ovat määritelty java -koodissa ja niiden avulla voidaan
+    suorittaa jokin toimenpide; esimerkiksi laskutoimitus tai jonkin
+    päätöksen tekeminen. Metodit ovat viittauksia jotka muodostuvat
+    aloittavasta &quot;$&quot; merkistä, jota seuraa VTL tunniste, jonka 
jälkeen
+    tulee VTL <em>Metodirunko</em>. VTL Metodirunko koostuu VTL
+    tunnisteesta jota seuraa vasen sulkumerkki &quot;(&quot;, jota seuraa
+    valinnainen parametrilista, jota seuraa oikeanpuoleinen
+    sulkumerkki &quot;)&quot;. Seuraavassa on esimerkkejä toimivista
+    metodiviittauksista:
+ </p>
+<div class="source"><pre>
+$asiakas.getOsoite()
+$ostos.getSumma()
+$sivu.setOtsake( &quot;Minun kotisivuni&quot; )
+$henkilo.setOminaisuudet( [&quot;Outo&quot;, &quot;Kummallinen&quot;, 
&quot;Innostunut&quot;] )
+</pre>
+</div>
+<p>
+    Metodirungossa esiintyvä get tarkoittaa &quot;hae&quot; ja set 
&quot;aseta&quot;.
+ </p>
+<p>
+    Kaksi ensimmäistä esimerkkiä -- <em>$asiakas.getOsoite()</em> ja
+    <em>$ostos.getSumma()</em> -- näyttävät samanlaisilta kuin
+    Ominaisuudet -osiossa aiemmin; <em>$asiakas.Osoite</em> ja
+    <em>$ostos.Summa</em>. Jos arvasit että näillä esimerkeillä on
+    jotakin yhteyttä toisiinsa, olit oikeassa!
+ </p>
+<p>
+    VTL ominaisuuksia voidaan käyttää lyhyempinä muotoina VTL
+    metodeista. Ominaisuudella <em>$asiakas.Osoite</em> on täysin sama
+    vaikutus kuin käyttämällä metodia
+    <em>$asikas.getOsoite()</em>. Yleisesti ottaen ominaisuuksien
+    käyttö on suositeltavaa silloin kuin se vain on
+    mahdollista. Suurin ero ominaisuuksien ja metodien välillä on se,
+    että metodeille voi antaa parametreja.
+ </p>
+<p>
+    Seuraavien metodien kanssa voidaan käyttää lyhyttä muotoa:
+ </p>
+<div class="source"><pre>
+$aurinko.getPlaneetat()
+$mato.getMulta()
+$albumi.getValokuva()
+</pre>
+</div>
+<p>
+    Näiden metodien voisimme olettaa palauttavan auringolle kuuluvien
+    planeettojen nimet, syöttävän matomme, tai hakevan valokuvan
+    albumista. Seuraavissa metodeissa toimii vain pitkä muoto:
+ </p>
+<div class="source"><pre>
+$aurinko.getPlaneetat( [&quot;Maa&quot;, &quot;Mars&quot;, 
&quot;Neptunus&quot;] )
+## lyhyessä muodossa $sun.Planets ei voida antaa parametreja
+
+$sisyphus.pushRock()
+## Velocity olettaa että tarkoitan $sisyphus.getRock()
+
+$kirja.setOtsake( &quot;Catalonian kotisivu&quot; )
+## Parametrilistaa ei voida antaa
+</pre>
+</div>
+<p><a name="Muodollinen_viittausten_merkintä"><strong>Muodollinen viittausten 
merkintä</strong></a><br />
+
+
+    Edellisissä esimerkeissä käytettiin viittauksille lyhyttä
+    merkintätapaa. Viittauksille on olemassa myös muodollinen
+    merkintätapa, jota käytetään seuraavissa esimerkeissä:
+ </p>
+<div class="source"><pre>
+${kuraLinko}
+${asiakas.Osoite}
+${osto.getSumma()}
+</pre>
+</div>
+<p>
+    Voit käyttää lyhyttä muotoa viittauksiin lähes aina, mutta
+    joissain tapauksissa muodollista viittausta tarvitaan virheettömän
+    toiminnan turvaamiseksi.
+ </p>
+<p>
+    Oletetaan että olet luomassa lausetta jonka sisältö riippuu
+    muuttujasta. Muuttujaa <em>$pahe</em> käytetään pohjana luotaessa
+    muuttujasta riippuvaista sanaa. Tarkoituksena on sallia käyttäjän
+    valita pohjasana ja tuottaa toinen seuraavista tuloksista: &quot;Juha
+    on pyromaani.&quot; tai &quot;Juha on kleptomaani.&quot;. Tässä 
tapauksessa
+    lyhyen viittausmuodon käyttäminen ei toimisi. Tutki seuraavaa
+    esimerkkiä:
+ </p>
+<div class="source"><pre>
+Juha on $pahemaani.
+</pre>
+</div>
+<p>
+    Velocity olettaa että tarkoitat muuttujaa <em>$pahemaani</em>,
+    vaikka käytettävä muuttuja oli <em>$pahe</em>. Koska Velocity ei
+    löydä arvoa muuttujalle <em>$pahemaani</em>, se palauttaa
+    <em>$pahemaani</em>. Tämä ongelma voidaan ratkaista käyttämällä
+    muodollista viittausta.
+ </p>
+<div class="source"><pre>
+Juha on ${pahe}maani.
+</pre>
+</div>
+<p>
+    Nyt Velocity ymmärtää että haluttu viittaus on <em>$pahe</em>, ei
+    <em>$pahemaani</em>. Muodollinen viittausten merkintä on usein
+    hyödyllinen silloin kun viittaukset ovat kiinni muussa tekstissä.
+ </p>
+<p><a name="Hiljainen_viittausten_merkintä"><strong>Hiljainen viittausten 
merkintä</strong></a><br />
+
+    Kun Velocityltä haetaan viittaus jolle ei ole määritelty arvoa,
+    palauttaa se normaalisti viittauksen tekstinä. Oletetaan
+    esimerkiksi että seuraavat viittaukset ovat osa VTL sivupohjaa:
+ </p>
+<div class="source"><pre>
+&lt;input type=&quot;text&quot; name=&quot;email&quot; 
value=&quot;$email&quot;/&gt;
+</pre>
+</div>
+<p>
+    Kun lomake latautuu ensimmäisen kerran muuttujaviittauksella
+    <em>$email</em> ei ole arvoa. Oletuksena Velocity täyttää
+    lomakkeen tekstillä &quot;$email&quot;. Haluaisit kuitenkin kenttään
+    mieluummin tyhjän arvon. Käyttämällä hiljaista viittausten
+    merkintää voidaan Velocityn normaali toiminta estää;
+    <em>$email</em> koodin sijaan käytät viittausta
+    <em>$!email</em>. Yllä oleva koodi näyttäisi siis seuraavalta:
+ </p>
+<div class="source"><pre>
+&lt;input type=&quot;text&quot; name=&quot;email&quot; 
value=&quot;$!email&quot;/&gt;
+</pre>
+</div>
+<p>
+    Kun lomake latautuu ensimmäisen kerran eikä muuttujalla
+    <em>$email</em> ole arvoa, tulostetaankin kenttään tyhjä teksti
+    &quot;$email&quot; tekstin sijaan.
+ </p>
+<p>
+    Muodollista ja hiljaista muuttujien merkintää voidaan käyttää myös
+    yhdessä;
+ </p>
+<div class="source"><pre>
+&lt;input type=&quot;text&quot; name=&quot;email&quot; 
value=&quot;$!{email}&quot;/&gt;
+</pre>
+</div>
+</div>
+<div class="section"><h2><a name="Kirjaimellisesti"></a>Kirjaimellisesti</h2>
+<p>
+    VTL käyttää erikoismerkkejä kuten <em>$</em> ja <em>#</em> omassa
+    toiminnassaan, joten näiden merkkien käyttö sivupohjassa vaatii
+    erityistä huolellisuutta. Tässä kappaleessa käsittelemme
+    <em>$</em> merkin suojaamisen (escape).
+  </p>
+<p><a name="Dollari"><strong>Dollari</strong></a><br />
+
+
+    Seuraavassa lauseessa dollarimerkin käytössä ei ole ongelmaa:
+    &quot;Ostin markkinoilta säkin perunoita hintaan $2.50!&quot;. Kuten
+    mainittu, VTL tunniste alkaa aina aakkosmerkillä, joten merkintää
+    $2.50 ei ole vaaraa sekoittaa viittaukseksi.
+  </p>
+<p><a name="VTLviittaustensuojaaminen"><strong>VTL viittausten 
suojaaminen</strong></a><br />
+
+
+    Ongelmatilanne saattaa syntyä silloin, kun Velocity ei osaa
+    päätellä tarkoitetaanko dollarinmerkillä merkkiä itseään, vai
+    viittausta. Erikoismerkkien <em>suojaaminen</em> on paras keino
+    käsitellä VTL erikoismerkkejä sivupohjissa. Suojaamiseen käytetään
+    kenoviivaa ( <em>\</em> ).
+  </p>
+<div class="source"><pre>
+#set( $email = &quot;foo&quot; )
+$email
+</pre>
+</div>
+<p>
+    Kun Velocity käsittelee <em>$email</em> viittauksen
+    sivupohjassasi, se etsii löytyykö sen nimiselle muuttujalle
+    arvoa. Tässä tapauksessa tuloste tulee olemaan <em>foo</em>, koska
+    <em>$email</em> on määritelty. Jos <em>$email</em> muuttujaa ei
+    olisi määritelty tulisi tulosteeksi <em>$email</em>.
+  </p>
+<p>
+    Oletetaan että <em>$email</em> on määritelty (sillä on esimerkiksi
+    arvo <em>foo</em>), ja että haluat muuttujan arvon sijaan tulostaa
+    sen nimen <em>$email</em>. Tämä saavuttamiseksi on useita keinoja,
+    joista helpoin on suojausmerkin käyttäminen.
+  </p>
+<div class="source"><pre>
+## Seuraava rivi määrittelee muuttujan $email tässä sivupohjassa:
+#set( $email = &quot;foo&quot; )
+$email
+\$email
+\\$email
+\\\$email
+</pre>
+</div>
+<p>
+     tulosteeksi tulee
+  </p>
+<div class="source"><pre>
+foo
+$email
+\foo
+\\$email
+</pre>
+</div>
+<p>
+     Huomaa <em>$</em> merkin eteen liitetty <em>\</em>
+     merkki. Suojausmerkit tulkitaan vasemmalta oikealle, joten
+     <em>\\\$email</em> tulostuu <em>\\$email</em>. Vertaa näitä
+     esimerkkejä tulosteeseen joka saadaan kun <em>$email</em>
+     muuttujaa ei ole määritelty.
+  </p>
+<div class="source"><pre>
+$email
+\$email
+\\$email
+\\\$email
+</pre>
+</div>
+<p>
+     tulosteeksi tulee
+  </p>
+<div class="source"><pre>
+$email
+\$email
+\\$email
+\\\$email
+</pre>
+</div>
+<p>
+     Huomaa kuinka Velocity käsittelee eri tavalla viittaukset joiden
+     arvo on määritelty niistä joita ei ole määritelty. Seuraavassa on
+     set ohje joka asettaa <em>$foo</em> muuttujalle arvon
+     <em>gibbous</em>.
+  </p>
+<div class="source"><pre>
+#set( $foo = &quot;gibbous&quot; )
+$kuu = $foo
+</pre>
+</div>
+<p>
+    Tulosteeksi tulee: <em>$kuu = gibbous</em> -- missä <em>$kuu</em>
+    tulostetaan muuttujan nimenä, koska sen arvoa ei ole määritelty ja
+    <em>gibbous</em> tulostetaan muuttujan <em>$foo</em> arvona.
+  </p>
+<p>
+     Myös VTL ohjeiden suojaaminen on mahdollista; tämä kuvataan
+     tarkemmin Ohjeet -kappaleessa.
+  </p>
+</div>
+<div class="section"><h2><a name="Kirjainkoon_muutos"></a>Kirjainkoon 
muutos</h2>
+<p>
+    Kun nyt olet tutustunut viittauksiin, voit alkaa käyttämään niitä
+    tehokkaasti omissa sivupohjissasi. Viittaukset Velocityssä
+    käyttävät hyväkseen joitakin java kielen perusperiaatteita, joiden
+    käyttö helpottaa sivusuunnittelijoiden työtä. Esimerkiksi:
+    </p>
+<div class="source"><pre>
+$foo
+
+$foo.getBar()
+## on sama kuin
+$foo.Bar
+
+$data.setKayttaja(&quot;juha&quot;)
+## on sama kuin
+#set( $data.Kayttaja = &quot;juha&quot; )
+
+$data.getPyynto().getPalvelinNimi()
+## on sama kuin
+$data.Pyynto.PalvelinNimi
+## on sama kuin
+${data.Pyynto.PalvelinNimi}
+</pre>
+</div>
+<p>
+    Nämä esimerkit havainnollistavat viittauksen vaihtoehtoisia
+    merkitsemistapoja. Velocity käyttää hyväkseen javan introspection
+    ja bean -ominaisuuksia objektien sekä niiden metodien
+    viittausnimiä ratkaistaessa. Viittauksia voidaan lisätä lähes
+    mihin kohtaan tahansa sivupojassa.
+    </p>
+<p>
+    Velocity on tehty Sun Microsystemsin määrittelemän Bean
+    määrityksen mukaiseksi, ja on tästä syystä pieni-iso-eroava
+    (ts. pienet ja isot kirjaimet käsitellään eri
+    merkkeinä). Velocityn kehittäjät ovat tehneet parhaansa jotta
+    mahdolliset kirjoitusvirheet voitaisiin korjata
+    automaattisesti. Kun sivupohjassa viitataan metodiin
+    <em>getFoo()</em> koodilla <code>$bar.foo</code>, Velocity
+    kokeilee ensin viittausta <code>$getfoo</code>. Jos tämä ei tuota
+    tulosta, seuraavaksi yritetään viittausta
+    <code>$getFoo</code>. Samalla tavalla, kun sivupohjassa viitataan
+    muuttujaan <code>$bar.Foo</code>, ensin yritetään viittausta
+    <em>$getFoo()</em> ja sitten <em>getfoo()</em>.
+    </p>
+<p>
+    Huomaa: <em>Viittauksia ilmentymämuuttujiin (instance variables)
+    ei ratkaista.</em> Vain viittaukset JavaBeanin mukaisiin
+    haku/asetus (getter/setter) metodeihin ratkaistaan (toisin sanoen
+    <code>$foo.Name</code> ratkaistaan Foo -luokan
+    <code>getName()</code> ilmentymämetodiin (instance method), mutta
+    ei luokan Foo julkiseen (public) <code>Name</code>
+    ilmentymämuuttujaan).
+    </p>
+</div>
+<div class="section"><h2><a name="Ohjeet"></a>Ohjeet</h2>
+<p><em>Ohjeet</em> ovat helppokäyttöisiä skriptielementtejä joita
+    voidaan käyttää web sivun tulosteen manipuloimiseen. Viittausten
+    avulla sivupohjien suunnittelijat voivat tuottaa web sivuille
+    dynaamista sisältöä, kun taas ohjeet antavat mahdollisuuden
+    määritellä sivuston ulkoasun ja sisällön.
+ </p>
+<a name="Set"><strong>#set</strong></a><p><em>#set</em> ohjetta käytetään 
arvon määrittämiseksi
+    viittaukselle. Arvo voidaan määrittää joko muuttujaviittaukselle
+    tai ominaisuusviittaukselle. Määritys tehdään suluissa, kuten
+    seuraavassa esimerkissä:
+ </p>
+<div class="source"><pre>
+#set( $kadellinen = &quot;apina&quot; )
+#set( $asiakas.Kayttaytyminen = $kadellinen )
+</pre>
+</div>
+<p>
+    Määrityksen vasemman puolen (left hand side, LHS) tulee olla
+    muuttuja- tai ominaisuusviittaus. Oikea puoli (right hand side,
+    RHS) voi olla jokin seuraavista tyypeistä:
+ </p>
+<p><ul><li>Muuttujaviittaus</li>
+<li>Tekstivakio</li>
+<li>Ominaisuusviittaus</li>
+<li>Metodiviittaus</li>
+<li>Numeerinen vakio</li>
+<li>ArrayList taulukko</li>
+</ul>
+</p>
+<p>
+    Seuraavassa esimerkit kustakin mainitusta tyypistä:
+ </p>
+<div class="source"><pre>
+#set( $apina = $bill ) ## muuttujaviittaus
+#set( $apina.Ystava = &quot;monica&quot; ) ## tekstivakio
+#set( $apina.Syytos = $valkoinentalo.vuoto ) ## ominaisuusviittaus
+#set( $apina.Suunnitelma = $spindoctor.weave($web) ) ## metodiviittaus
+#set( $apina.Numero = 123 ) ## numeerinen vakio
+#set( $apina.Sano = [&quot;Ei&quot;, $minun, &quot;vikani&quot;] ) ## taulukko
+</pre>
+</div>
+<p>
+   HUOMAA: Viimeisessä esimerkissä [..] operaattorilla määritetyt
+   elementit ovat käytettävissä ArrayList -luokan metodien
+   avulla. Voisit siis esimerkiksi viitata taulukon ensimmäiseen
+   elementtiin koodilla $apina.Sano.get(0).
+ </p>
+<p>
+    Oikeanpuoleinen arvo (RHS) voi olla myös yksinkertainen
+    matemaattinen operaatio:
+ </p>
+<div class="source"><pre>
+#set( $arvo = $foo + 1 )
+#set( $arvo = $bar - 1 )
+#set( $arvo = $foo * $bar )
+#set( $arvo = $foo / $bar )
+</pre>
+</div>
+<p>
+    Jos määrityksen oikeanpuoleinen ominaisuus- tai metodiviittaus on
+    arvoa <em>null</em>, sitä <b>ei</b> anneta vasemman puolen
+    arvoksi. Tätä keinoa ei voida käyttää olemassa olevan viittauksen
+    poistamiseen. Tämä saattaa olla hämäävää Velocityn uusille
+    käyttäjille. Esimerkiksi:
+ </p>
+<div class="source"><pre>
+#set( $tulos = $kysely.kriteeri(&quot;nimi&quot;) )
+Ensimmäisen kyselyn tulos on $tulos
+
+#set( $tulos = $kysely.kriteeri(&quot;osoite&quot;) )
+Toisen kyselyn tulos on $tulos
+</pre>
+</div>
+<p>
+     Jos <em>$kysely.kriteeri(&quot;nimi&quot;)</em> palauttaa merkkijonon
+     &quot;pete&quot;, ja <em>$kysely.kriteeri(&quot;osoite&quot;)</em> 
palauttaa arvon
+     <em>null</em>, on esimerkin tuloste seuraava:
+ </p>
+<div class="source"><pre>
+Ensimmäisen kyselyn tulos on pete
+
+Toisen kyselyn tulos on pete
+</pre>
+</div>
+<p>
+     Tällä on vaara hämätä aloittelijoita jotka muodostavat
+     <em>#foreach</em> silmukoita joissa yritetään asettaa
+     <em>#set</em> ohjeella viittausta ominaisuus- tai
+     metodiviittauksella, ja sen jälkeen testataan tuota viittausta
+     <em>#if</em> ohjeella. Esimerkiksi:
+ </p>
+<div class="source"><pre>
+
+#set( $kriteerit = [&quot;nimi&quot;, &quot;osoite&quot;] )
+
+#foreach( $kriteeri in $kriteerit )
+
+    #set( $tulos = $kysely.kriteerit($kriteeri) )
+
+    #if( $tulos )
+        Kysely onnistui
+    #end
+
+#end
+</pre>
+</div>
+<p>
+     Yllä olevassa esimerkissä ei kannata luottaa <em>$tulos</em>
+     muuttujan vertaamiseen kyselyn onnistumisen selville
+     saamiseksi. Kun <em>$tulos</em> on asetettu <em>#set</em>
+     ohjeella (lisatty kontekstiin), sitä ei voida asettaa
+     <em>null</em>:iksi (poistaa kontekstista). <em>#if</em> ja
+     <em>#foreach</em> ohjeet käsitellään tarkemmin myöhemmin tässä
+     dokumentissa.
+ </p>
+<p>
+   Yksi ratkaisu ongelmaan olisi asettaa <em>$tulos</em> etukäteen
+   arvoon <em>false</em> (epätosi). Tämän jälkeen jos kutsu
+   <em>$kysely.kriteeri()</em> epäonnistuu, voit tarkastaa arvon.
+ </p>
+<div class="source"><pre>
+
+#set( $kriteerit = [&quot;nimi&quot;, &quot;osoite&quot;] )
+
+#foreach( $kriteeri in $kriteeri )
+
+    #set( $tulos = false )
+    #set( $tulos = $kysely.kriteerit($kriteeri) )
+
+    #if( $tulos )
+        Kysely onnistui
+    #end
+
+#end
+</pre>
+</div>
+<p>
+    Muutamista muista Velocityn ohjeista poiketen, <em>#set</em> ohje
+    ei käytä <em>#end</em> lausetta.
+ </p>
+<a name="Tekstivakiot"><strong>Tekstivakiot</strong></a><p><em>#set</em> 
ohjetta käytettäessä lainausmerkkeihin (&quot; &quot;)
+    suljettu teksti tulkitaan ja tulostetaan kuten seuraavasta
+    esimerkistä käy ilmi:
+ </p>
+<div class="source"><pre>
+#set( $hakemistoJuuri = &quot;www&quot; )
+#set( $sivupohjaNimi = &quot;index.vm&quot; )
+#set( $sivupohja = &quot;$hakemistoJuuri/$sivupohjaNimi&quot; )
+$sivupohja
+</pre>
+</div>
+<p>
+  Tulosteeksi tulee
+ </p>
+<div class="source"><pre>
+www/index.vm
+</pre>
+</div>
+<p>
+    Jos teksti on suljettu hipsuihin (' '), sitä ei tulkita:
+ </p>
+<div class="source"><pre>
+#set( $foo = &quot;bar&quot; )
+$foo
+#set( $blargh = '$foo' )
+$blargh
+</pre>
+</div>
+
+
+  Tulosteeksi tulee:
+
+<div class="source"><pre>
+  bar
+  $foo
+</pre>
+</div>
+<p>
+    Tulkitsemattoman tekstin tulostaminen hipsumerkkien sisällä
+    olevavasta tekstistä on oletuksena käytössä
+    Velocityssä. Oletusarvo voidaan muuttaa vaihtamalla
+    <code>velocity.properties</code> siten että
+    <code>stringliterals.interpolate=false</code>.
+ </p>
+</div>
+<div class="section"><h2><a name="If-Else_ehtolauseet"></a>If-Else 
ehtolauseet</h2>
+<strong>If / ElseIf / Else</strong><p><em>#if</em> ohjeen avulla voidaan 
teksti sisällyttää web
+       sivulle sillä ehdolla että if lauseen arvo on
+       tosi. Esimerkiksi:
+    </p>
+<div class="source"><pre>
+#if( $foo )
+   &lt;strong&gt;Velocity!&lt;/strong&gt;
+#end
+</pre>
+</div>
+<p>
+      Muuttuja <em>$foo</em> testataan jotta nähdään onko se tosi,
+      joka tapahtuu kahdessa eri tapauksessa: (i) <em>$foo</em> on
+      boolean arvo (tosi/epätosi) jolla on tosi -arvo, tai (ii) arvo
+      on eri kuin null (eli muuttuja ei ole tyhjä). <em>#if</em> ja
+      <em>#end</em> lauseiden väliin jäävä sisältö tulostetaan mikäli
+      testimuuttuja on tosi. Esimerkkitapauksessamme, jos muuttujalla
+      <em>$foo</em> on null arvo, tai jos se on boolean epätosi, on
+      testimuuttuja epätosi, eikä tulostetta tule lainkaan.
+    </p>
+<p><em>#if</em> ja <em>#end</em> lauseiden välissä oleva teksti
+      tulee tulosteeksi mikäli ehto on tosi. Tässä tapauksessa jos
+      <em>$foo</em> on tosi, tulosteeksi tulee:
+      &quot;Velocity!&quot;. Toisaalta, mikäli <em>$foo</em> on epätosi, on 
myös
+      ehtolause epätosi eikä tulostetta tule.
+    </p>
+<p><em>#elseif</em> tai <em>#else</em> elementtejä voidaan käyttää
+      <em>#if</em> elementin kanssa. Huomaa, että Velocityn
+      sivumoottori lopettaa ensimmäisen tosiarvon saaneen
+      testimuuttujan kohdalla. Oletetaan seuraavassa esimerkissä että
+      muuttujalla <em>$foo</em> on arvo 15 ja muuttujalla
+      <em>$bar</em> on arvo 6.
+    </p>
+<div class="source"><pre>
+#if( $foo &lt; 10 )
+    &lt;strong&gt;Mene pohjoiseen&lt;/strong&gt;
+#elseif( $foo == 10 )
+    &lt;strong&gt;Mene itään&lt;/strong&gt;
+#elseif( $bar == 6 )
+    &lt;strong&gt;Mene etelään&lt;/strong&gt;
+#else
+    &lt;strong&gt;Mene länteen&lt;/strong&gt;
+#end
+</pre>
+</div>
+<p>Tässä esimerkissä <em>$foo</em> on suurempi kuin 10, joten
+    kaksi ensimmäistä vertailua eivät ole tosia. Seuraavaksi muuttujaa
+    <em>$bar</em> verrataan lukuun 6, joka on tosi, joten tulosteeksi
+    tulee <strong>Mene etelään</strong>.
+    </p>
+<p><a name="Relaatio-jaloogisetoperaattorit"><strong>Relaatio- ja
+    loogiset operaattorit</strong></a></p>
+<p>
+    Velocity käyttää vastaavuusoperaattoria muuttujien välisten
+    suhteiden tulkitsemiseen. Seuraavassa on yksinkertainen esimerkki
+    vastaavuusoperaattorin käytöstä.
+    </p>
+<div class="source"><pre>
+#set ($foo = &quot;deoksiribonukleiinihappo&quot;)
+#set ($bar = &quot;ribonukleiinihappo&quot;)
+
+#if ($foo == $bar)
+  Muuttujat eivät selvästikään ole samanlaiset. Joten...
+#else
+  Vastaavuusvertaus on epätosi, ja tämä teksti tulee tulosteeksi.
+#end
+</pre>
+</div>
+<p>
+      Velocity tukee myös loogisia AND ja OR
+      operaattoreita. Lisätietoja löydät dokumentista <a 
href="../vtl-reference-guide.html">VTL Reference Guide</a>. Alla on
+      esimerkkilause joka käyttää loogista AND:iä.
+    </p>
+<div class="source"><pre>
+
+## looginen AND
+
+#if( $foo &amp;&amp; $bar )
+   &lt;strong&gt; Tämä JA tuo&lt;/strong&gt;
+#end
+
+</pre>
+</div>
+<p>
+      If lause on tosi vain mikäli sekä <em>$foo</em> että
+      <em>$bar</em> ovat tosia. Jos <em>$foo</em> on epätosi, tulee
+      lauseesta epätosi eikä <em>$bar</em> muuttujaa tarvitse edes
+      testata. Jos <em>$foo</em> on tosi, testataan sen jälkeen
+      muuttujan <em>$bar</em> arvo; jos myös <em>$bar</em> on tosi,
+      silloin koko ilmaus on tosi ja <strong>Tämä JA tuo</strong>
+      tulee tulosteeksi. Jos <em>$bar</em> on epätosi, silloin koko
+      ilmaus on epätosi eikä tulostetta tule.
+    </p>
+<p>
+      Looginen OR operaattori toimii samaan tapaan, paitsi että vain
+      toisen viittauksen pitää olla tosi jotta koko ilmaus olisi
+      tosi. Katso seuraavaa esimerkkiä.
+    </p>
+<div class="source"><pre>
+
+## looginen OR
+
+#if( $foo || $bar )
+    &lt;strong&gt;Tämä TAI tuo&lt;/strong&gt;
+#end
+</pre>
+</div>
+<p>
+      Jos <em>$foo</em> on tosi, ei <em>$bar</em> muuttujaa tarvitse
+      edes testata. Oli <em>$bar</em> sitten tosi tai epätosi, koko
+      lauseke on tosi, ja <strong>Tämä TAI tuo</strong> on
+      tulosteena. Toisaalta mikäli <em>$foo</em> on epätosi, on
+      muuttujan <em>$bar</em> arvo testattava. Jos tässä tapauksessa
+      myös <em>$bar</em> on epätosi, koko ilmauksesta tulee epätosi
+      eikä tulostetta tule. Jos <em>$bar</em> on tosi, silloin koko
+      ilmauksesta tulee tosi, ja tulosteena on <strong>Tämä TAI
+      tuo</strong>.
+    </p>
+<p>
+    Loogisella EI (NOT) operaattorilla on vain yksi argumentti :
+    </p>
+<div class="source"><pre>
+
+## looginen NOT
+
+#if( !$foo )
+  &lt;strong&gt;EI tuota&lt;/strong&gt;
+#end
+
+</pre>
+</div>
+<p>
+    Jos <em>$foo</em> on tosi, silloin <em>!$foo</em> on epätosi, eikä
+    tulostetta tämän vuoksi tule. Mikäli <em>$foo</em> on epätosi,
+    silloin <em>!$foo</em> on tosi ja <strong>EI tuota</strong> on
+    tulosteena. Älä sekoita tätä merkintää <em>hiljaiseen viittaukseen
+    $!foo</em> joka tarkoittaa jotakin aivan muuta.
+    </p>
+</div>
+<div class="section"><h2><a name="Silmukat"></a>Silmukat</h2>
+<strong>Foreach silmukat</strong><p><em>#foreach</em> mahdollistaa silmukoiden 
tekemisen. Esimerkiksi:
+    </p>
+<div class="source"><pre>
+&lt;ul&gt;
+#foreach( $tuote in $kaikkiTuotteet )
+    &lt;li&gt;$tuote&lt;/li&gt;
+#end
+&lt;/ul&gt;
+</pre>
+</div>
+<p>
+    Tämä <em>#foreach</em> silmukka käy läpi yksi kerrallaan kaikki
+    <em>$kaikkiTuotteet</em> listassa olevat tuotteet. Jokaisella
+    kierroksella seuraavan tuotteen arvo kopioidaan
+    <em>$kaikkiTuotteet</em> listasta muuttujaan <em>$tuote</em>.
+    </p>
+<p><em>$kaikkiTuotteet</em> lista on tyyppiä Vector, Hashtable tai
+    Array. <em>$tuote</em> muuttujaan kopioitu arvo on java objekti
+    (Object), joten siihen voidaan myös viitata objektina. Jos
+    esimerkiksi <em>$tuote</em> muuttuja olisi tyyppiä Tuote, sen nimi
+    voitaisiin hakea viittaamalla <em>$tuote.Name</em> metodiin
+    (ts. <em>$Tuote.getName()</em>.
+    </p>
+<p>
+    Oletetaan että <em>$kaikkiTuotteet</em> on tyyppiä Hashtable. Jos
+    haluat hakea Hashtablen avainarvot sekä niihin liittyvät objektit,
+    voit käyttää seuraavanlaista koodia:
+    </p>
+<div class="source"><pre>
+&lt;ul&gt;
+#foreach( $avain in $kaikkiTuotteet.keySet() )
+    &lt;li&gt;Avain: $avain -&gt; Arvo: $kaikkiTuotteet.get($avain)&lt;/li&gt;
+#end
+&lt;/ul&gt;
+</pre>
+</div>
+<p>
+    Velocityllä on helppo keino silmukkalaskurin käyttämiseen. Voit
+    käyttää laskuria esimerkiksi seuraavasti:
+    </p>
+<div class="source"><pre>
+&lt;table&gt;
+#foreach( $asiakas in $asiakasLista )
+    
&lt;tr&gt;&lt;td&gt;$foreach.count&lt;/td&gt;&lt;td&gt;$asiakas.Nimi&lt;/td&gt;&lt;/tr&gt;
+#end
+&lt;/table&gt;
+</pre>
+</div>
+</div>
+<div class="section"><h2><a name="Include"></a>Include</h2>
+<p><em>#include</em> elementin avulla sivusuunnittelija voi hakea
+    paikallisesta tiedostojärjestelmästä tiedoston, jonka sisältö
+    lisätään sivun siihen kohtaan jossa <em>#include</em> määritys
+    tehtiin. Tiedoston sisältö liitetään sellaisenaan eikä sitä siis
+    käytetä Velocityn sivumoottorin kautta. Turvallisuussyistä
+    haettava tiedosto voi sijaita vain TEMPLATE_ROOT vakion
+    määrittämän hakemiston alla.
+    </p>
+<div class="source"><pre>
+#include( &quot;yksi.txt&quot; )
+</pre>
+</div>
+<p>
+    Tiedosto johon <em>#include</em> ohje viittaa on
+    lainausmerkeissä. Jos halutaan sisällyttää useampia kuin yksi
+    tiedosto, tiedostonimet tulee erotella toisistaan pilkuilla.
+    </p>
+<div class="source"><pre>
+#include( &quot;yksi.gif&quot;,&quot;kaksi.txt&quot;,&quot;kolme.htm&quot; )
+</pre>
+</div>
+<p>
+    Sisällytettävään tiedoston ei ole pakko viitata nimen perusteella;
+    itse asiassa usein on parempi käyttää muuttujaa tiedostonimen
+    asemesta. Tämä on hyödyllistä esimerkiksi silloin kun sivun
+    ulkoasu riippuu sivupyynnön aikana päätettävästä
+    ehdosta. Seuraavassa on esimerkki jossa käytetään sekä
+    tiedostonimeä että muuttujaa.
+    </p>
+<div class="source"><pre>
+#include( &quot;terveiset.txt&quot;, $sesonkivarasto )
+</pre>
+</div>
+</div>
+<div class="section"><h2><a name="Parse"></a>Parse</h2>
+<p><em>#parse</em> elementin avulla sivusuunnittelija voi sisällyttää
+    paikallisesta levyjärjestelmästä tiedostoja jotka sisältävät VTL
+    elementtejä. Velocity tulkitsee VTL komennot ja tulostaa tuloksen.
+    </p>
+<div class="source"><pre>
+#parse( &quot;mina.vm&quot; )
+</pre>
+</div>
+<p><em>#include</em> ohjeen tapaan <em>#parse</em> voi ottaa
+    parametrikseen nimen lisäksi myös muuttujan. Kaikkien sivupohjien
+    joihin <em>#parse</em> ohjeella viitataan tulee sijaita
+    TEMPLATE_ROOT vakion määrittämän hakemiston
+    alla. <em>#include</em> ohjeesta poiketen <em>#parse</em> voi
+    ottaa vain yhden argumentin.
+    </p>
+<p>
+    VTL sivupohjissa voi olla <em>#parse</em> ohjeita jotka viittaavat
+    sivupohjiin joissa niissäkin on <em>#parse</em>
+    ohjeita. <code>velocity.properties</code> tiedostossa oleva rivi
+    <em>parse_directive.maxdepth</em> määrittää sen kuinka monta
+    peräkkäistä <em>#parse</em> viittausta voidaan tehdä. Mikäli
+    <em>parse_directive.maxdepth</em> määritys puuttuu, käytetään
+    oletusarvoa 10. Rekursiivisuus on sallittu. Jos esimerkiksi
+    sivupohja <code>dofoo.vm</code> sisältää seuraavat rivit:
+    </p>
+<div class="source"><pre>
+Laske alaspäin.
+#set( $laskuri = 8 )
+#parse( &quot;parsefoo.vm&quot; )
+Kaikki valmista: dofoo.vm!
+</pre>
+</div>
+<p>
+    Koodi viittaisi sivupohjaan <code>parsefoo.vm</code>, jossa
+    puolestaan voisi olla seuraavat VTL komennot:
+    </p>
+<div class="source"><pre>
+$laskuri
+#set( $laskuri = $laskuri - 1 )
+#if( $laskuri &gt; 0 )
+    #parse( &quot;parsefoo.vm&quot; )
+#else
+    Kaikki valmista: parsefoo.vm!
+#end
+</pre>
+</div>
+<p>
+    Kun &quot;Laske alaspäin.&quot; on näytetty, Velocity lataa ja siirtää
+    kontrollin sivupohjalle <code>parsefoo.vm</code>, joka laskee alas
+    luvusta 8. Kun laskuri saavuttaa arvon 0, tulostetaan &quot;Kaikki
+    valmista: parsefoo.vm!&quot;. Tämän jälkeen Velocity palaa sivupohjaan
+    <code>dofoo.vm</code> ja tulostaa &quot;Kaikki valmista: dofoo.vm!&quot;
+    tekstin.
+    </p>
+</div>
+<div class="section"><h2><a name="Stop"></a>Stop</h2>
+<p><em>#stop</em> elementin avulla sivupohjan suunnittelija voi
+    pysäyttää sivun tulkitsemisen. Tämä on hyödyllistä sivupohjan
+    virheidenetsinnän aikana.
+    </p>
+<div class="source"><pre>
+#stop
+</pre>
+</div>
+</div>
+<div class="section"><h2><a name="Velocimakrot"></a>Velocimakrot</h2>
+<p><em>#macro</em> elementin avulla sivupohjan suunnittelija voi
+    määrittää toistuvasti käytetyn VTL sivupohjan osan. Velocimakrot
+    ovat erittäin käyttökelpoisia sekä monimutkaisissa, että
+    yksinkertaisissa tehtävissä. Seuraava Velocimakro toimii
+    johdantona Velocimakroihin. Se on luotu kirjoitettavan tekstin
+    määrän vähentämiseksi, sekä kirjoitusvirheiden määrän
+    minimoimiseksi.
+    </p>
+<div class="source"><pre>
+#macro( d )
+&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
+#end
+</pre>
+</div>
+<p>
+    Esimerkissä määriteltiin Velocimakro nimeltään <em>d</em>, ja sitä
+    voidaan kutsua muiden VTL ohjeiden tapaan:
+    </p>
+<div class="source"><pre>
+#d()
+</pre>
+</div>
+<p>
+    Kun tätä sivupohjaa haetaan, Velocity korvaa ohjeen <em>#d()</em>
+    rivillä joka sisältää yhden tyhjän solun.
+    </p>
+<p>
+    Velocimakro voi ottaa kuinka monta parametria tahansa -- tai ei
+    yhtään parametria, kuten ensimmäisessä esimerkissämme -- mutta kun
+    Velocimakroa kutsutaan, tulee kutsussa olla täsmälleen yhtä monta
+    parametria kuin makroa määriteltäessä. Useimmat Velocimakrot ovat
+    hieman monimutkaisempia kuin edellinen esimerkki. Seuraavassa on
+    Velocimakro joka ottaa kaksi argumenttia; värin ja listan.
+    </p>
+<div class="source"><pre>
+#macro( taulurivit $vari $jokulista )
+#foreach( $jotain in $jokulista )
+    &lt;tr&gt;&lt;td bgcolor=$vari&gt;$jotain&lt;/td&gt;&lt;/tr&gt;
+#end
+#end
+</pre>
+</div>
+<p>
+    Tässä esimerkissä määriteltiin Velocimakro <em>taulurivit</em>
+    joka ottaa kaksi parametria. Ensimmäinen parametri on
+    <em>$vari</em> ja toinen <em>$jokulista</em>.
+    </p>
+<p>
+    Velocimakroon voidaan kirjoittaa mitä tahansa koodia jota voidaan
+    käyttää muuallakin VTL sivupohjassa. <em>taulurivit</em>
+    Velocimakro on <em>foreach</em> lause. <em>taulurivit</em>
+    Velocimakrossa on kaksi <em>#end</em> lausetta; ensimmäinen kuuluu
+    <em>#foreach</em> lauseelle, jälkimmäinen päättää Velocimakron
+    määrityksen.
+    </p>
+<div class="source"><pre>
+#set( $suuretjarvet = 
[&quot;Superior&quot;,&quot;Michigan&quot;,&quot;Huron&quot;,&quot;Erie&quot;,&quot;Ontario&quot;]
 )
+#set( $vari = &quot;blue&quot; )
+&lt;table&gt;
+    #taulurivit( $vari $suuretjarvet )
+&lt;/table&gt;
+</pre>
+</div>
+<p>
+    Huomaa että <em>$suuretjarvet</em> on makron parametrin
+    <em>$jokulista</em> arvona. Kun Velocimakroa <em>#taulurivit</em>
+    tässä tapauksessa kutsutaan, on tuloksena seuraavaa:
+    </p>
+<div class="source"><pre>
+&lt;table&gt;
+    &lt;tr&gt;&lt;td bgcolor=&quot;blue&quot;&gt;Superior&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr&gt;&lt;td bgcolor=&quot;blue&quot;&gt;Michigan&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr&gt;&lt;td bgcolor=&quot;blue&quot;&gt;Huron&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr&gt;&lt;td bgcolor=&quot;blue&quot;&gt;Erie&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr&gt;&lt;td bgcolor=&quot;blue&quot;&gt;Ontario&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+</pre>
+</div>
+<p>
+    Velocimakroja voidaan määrittää <em>inline</em>, eli Velocity
+    sivupohjassa itsessään, jolloin ko. makro ei ole käytettävissä
+    muissa sivupohjissa. Velocimakron määrittäminen siten että se on
+    kaikkien sivupohjien käytössä on hyödyllistä; samaa makroa ei
+    tarvitse määrittää erikseen jokaisessa sivupohjassa jossa sitä
+    tarvitaan, jolloin työmäärä ja virheiden mahdollisuus
+    vähenee. Lisäksi makroon tehty muutos vaikuttaa heti kaikkiin
+    sivupohjiin joissa se on käytössä.
+    </p>
+<p>
+    Oletetaan että Velocityssä on määriteltynä Velocimakro
+    <em>#tablerows($vari $lista)</em>. Tätä makroa voitaisiin käyttää
+    missä tahansa sivupohjassa. Sitä voitaisiin käyttää useaan kertaan
+    ja moneen eri käyttötarkoitukseen. Sieniasioita käsittelevässä
+    sivupohjassa <code>sieni.vm</code>, <em>#tablerows</em>
+    Velocimakroa voitaisiin käyttää listaamaan tyypillisen sienen
+    osat:
+    </p>
+<div class="source"><pre>
+#set( $osat = 
[&quot;volva&quot;,&quot;stipe&quot;,&quot;annulus&quot;,&quot;gills&quot;,&quot;pileus&quot;]
 )
+#set( $cellbgcol = &quot;#CC00FF&quot; )
+&lt;table&gt;
+#tablerows( $cellbgcol $osat )
+&lt;/table&gt;
+</pre>
+</div>
+<p>
+    Kun Velocity luo sivun sivupohjasta <code>sieni.vm</code>, se
+    etsii Velocimakron <em>#tablerows</em> sivupohjakirjastosta (joka
+    on määritelty <code>velocity.properties</code> tiedostossa) ja
+    tuottaa seuraavan tulosteen:
+    </p>
+<div class="source"><pre>
+&lt;table&gt;
+    &lt;tr&gt;&lt;td bgcolor=&quot;#CC00FF&quot;&gt;volva&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr&gt;&lt;td bgcolor=&quot;#CC00FF&quot;&gt;stipe&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr&gt;&lt;td 
bgcolor=&quot;#CC00FF&quot;&gt;annulus&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr&gt;&lt;td bgcolor=&quot;#CC00FF&quot;&gt;gills&lt;/td&gt;&lt;/tr&gt;
+    &lt;tr&gt;&lt;td 
bgcolor=&quot;#CC00FF&quot;&gt;pileus&lt;/td&gt;&lt;/tr&gt;
+&lt;/table&gt;
+</pre>
+</div>
+<strong>Velocimakron argumentit</strong><p>
+   Velocimakrot voivat ottaa argumenteiksi mitä tahansa seuraavista
+   VTL elementeistä:
+  </p>
+<ul><li>
+      Viittaus : mitä tahansa '$' merkillä alkavaa
+    </li>
+<li>
+      Tekstivakio : esimerkiksi &quot;$foo&quot; tai 'hei'
+    </li>
+<li>
+      Numerovakio : 1, 2 jne
+    </li>
+<li>
+      Numeroväli : [ 1..2] tai [$foo .. $bar]
+    </li>
+<li>
+      ObjectArray : [ &quot;a&quot;, &quot;b&quot;, &quot;c&quot;]
+    </li>
+<li>
+       boolean arvo true (tosi)
+    </li>
+<li>
+       boolean arvo false (epätosi)
+    </li>
+</ul>
+<p>
+     Kun siirrät viittauksia argumentteina Velocimakroille, huomaa,
+     että viittaukset siirretään 'nimen mukaan' ('by name'). Tämä
+     tarkoittaa sitä, että viittausten arvo 'haetaan' Velocimakrossa
+     itsessään. Tämän ominaisuuden avulla voit siirtää viittauksia
+     jotka ovat metodikutsuja, ja näin ko. metodeja kutsutaan
+     Velocimakrossa. Esimerkiksi kun Velocimakroa kutsutaan
+     seuraavasti:
+   </p>
+<div class="source"><pre>
+     #macro( kutsu $a )
+         $a $a $a
+     #end
+
+     #kutsu( $foo.bar() )
+   </pre>
+</div>
+<p>
+       tuloksena viittauksen $foo metodia bar() kutsutaan 3 kertaa.
+    </p>
+<p>
+       Ensi katsomalta tämä ominaisuus saattaa vaikuttaa yllättävältä,
+       mutta kun otat huomioon Velocimakrojen alkuperäisen
+       tarkoituksen -- usein käytettyjen VTL komentojen leikkaa-liimaa
+       kopioimisen vähentäminen -- ominaisuus on perusteltu. Sen
+       avulla voit esimerkiksi siirtää Velocimakroon argumenttina
+       tilansa muistavia (stateful) objekteja, kuten objektin joka
+       generoi värejä peräkkäisessä järjestyksessä taulukon rivien
+       värien määrittämiseksi.
+    </p>
+<p>
+       Jos sinun tarvitsee kiertää tämä ominaisuus, voit hakea arvon
+       metodista uudeksi viittaukseksi, ja antaa sen argumentiksi:
+    </p>
+<div class="source"><pre>
+     #set( $uusiarvo = $foo.bar() )
+     #kutsu( $uusiarvo )
+   </pre>
+</div>
+<strong>Velocimakro ominaisuudet</strong><p><code>velocity.properties</code> 
tiedostossa on useita rivejä
+    joiden avulla Velocimakrojen toimintaa voidaan muuttaa
+    joustavasti. Huomaa että nämä arvot on dokumentoitu myös <a 
href="../developer-guide.html">Kehittäjän
+    oppaassa</a>.
+    </p>
+<p><code>velocimacro.library</code> - Pilkulla eroteltu lista
+    Velocimakro sivupohjakirjastoja. Oletuksena Velocity etsii yhtä
+    kirjastoa: <em>VM_global_library.vm</em>. Velocimakro kirjastoja
+    etsitään määritellystä sivupohjahakemistosta.
+    </p>
+<p><code>velocimacro.permissions.allow.inline</code> - Tämä
+    ominaisuus päättää voidaanko Velocimakroja määrittää tavallisissa
+    sivupohjissa. Ominaisuus voi saada arvon true (tosi) tai false
+    (epätosi). Oletuksena on tosi, jolloin sivusuunnittelijat voivat
+    määrittää Velocimakroja suoraan omissa sivupohjissaan.
+    </p>
+<p><code>velocimacro.permissions.allow.inline.to.replace.global</code>
+
+    - Tämän ominaisuuden avulla voidaan määrittää voivatko
+    sivupohjassa määritellyt Velocimakrot korvata yleisesti
+    määritellyt, <code>velocimacro.library</code> ominaisuuden kautta
+    ladatut Velocimakrot. Ominaisuus voi saada arvon true tai
+    false. Oletuksena <code>false</code>, epätosi, jolloin
+    sivupohjassa määritellyt Velocimakrot eivät voi korvata
+    sivupohjakirjastoista ladattuja makroja.
+    </p>
+<p><code>velocimacro.permissions.allow.inline.local.scope</code> -
+    Mahdolliset arvot ovat true tai false, oletuksena false. Tämä
+    ominaisuus päättää ovatko sivupohjassa määritetyt Velocimakrot
+    'näkyviä' ainoastaan siinä sivupohjassa jossa ne on
+    määritelty. Toisin sanoen kun tämä ominaisuus on asetettu arvoon
+    true (tosi), sivupohja voi määrittää inline Velocimakroja jotka
+    ovat käytettävissä vain sivupohjasta joka ne määritti. Tämän
+    ominaisuuden avulla voidaan aikaansaada erikoisia vaikutuksia; jos
+    yleisesti määritelty Velocimakro kutsuu toista yleisesti
+    määriteltyä makroa, tämän ominaisuuden avulla sivupohja voi
+    määrittää oman toteutuksensa jälkimmäisestä makrosta, jota
+    ensimmäinen makro kutsuu. Sivupohjan paikallista makroa käytetään
+    vain kun ensimmäistä makroa kutsutaan ko. sivupohjasta. Uusi makro
+    ei vaikuta muihin sivupohjiin.
+    </p>
+<p><code>velocimacro.library.autoreload</code> - Tämä ominaisuus
+    ohjaa Velocimakrokirjaston automaattista uudelleenlatausta. Kun
+    ominaisuus on asetettu arvoon <code>true</code> kutsutun
+    Velocimakron koodi tutkitaan mahdollisten muutosten varalta, ja se
+    ladataan uudelleen mikäli tarpeellista. Näin voit muuttaa ja
+    testata Velocimakrokirjastoa ilman että sinun tarvitsee käynnistää
+    uudelleen sovellustasi tai sovellusalustaa, aivan kuten voit tehdä
+    normaalien sivupohjienkin kanssa. Tämä asetus toimii vain kun
+    resurssilataajien välimuisti on pois päältä (<i>off</i>,
+    esim. <code>file.resource.loader.cache = false</code>). Tämä
+    ominaisuus on tarkoitettu käytettäväksi vain sovelluksen
+    kehitysvaiheessa, ei tuotantokäyttöön.
+    </p>
+<strong>Velocimakro Trivia</strong><p>
+    Nykyisellään Velocimakrot tulee olla määriteltyinä ennen kuin
+    niitä käytetään sivupohjissa. Tämä tarkoittaa sitä että #macro()
+    määritystesi tulee sijaita ennen rivejä joissa käytät Velocimakroja.
+    </p>
+<p>
+    Tämä on tärkeää muistaa jos yrität käyttää ohjetta #parse()
+    sivupohjaan jossa on inline #macro() ohjeita. Koska #parse()
+    suoritetaan ajon aikana, ja parseri päättää ajon aikana onko
+    sivupohjassa oleva Velocimakrolta näyttävä elementti Velocimakro,
+    ei Velocimakrojen #parse():aminen toimi niin kuin
+    olettaisi. Ongelma voidaan välttää helposti käyttämällä
+    <code>velocimacro.library</code> toimintoa jonka avulla Velocity
+    lataa Velocimakrosi käynnistyksen yhteydessä.
+    </p>
+</div>
+<div class="section"><h2><a name="VTL_ohjeiden_suojaaminen"></a>VTL ohjeiden 
suojaaminen</h2>
+<p>
+    VTL ohjeet voidaan suojata kenoviivalla (&quot;\&quot;) samalla tavalla 
kuin
+    VTL viittauksetkin.
+  </p>
+<div class="source"><pre>
+## #include( &quot;a.txt&quot; ) tulostuu &lt;tiedoston a.txt sisältö&gt;
+#include( &quot;a.txt&quot; )
+
+## \#include( &quot;a.txt&quot; ) tulostuu #include( &quot;a.txt&quot; )
+\#include( &quot;a.txt&quot; )
+
+## \\#include ( &quot;a.txt&quot; ) tulostuu \&lt;tiedoston a.txt sisältö&gt;
+\\#include ( &quot;a.txt&quot; )
+</pre>
+</div>
+<p>
+  Eritystä tarkkaavaisuutta tarvitaan tapauksissa joissa suojataan VTL
+  ohjeita jotka sisältävät useita skriptielementtejä samassa ohjeessa
+  (kuten if-else-end lause). Seuraavassa on tyypillinen VTL if-lause:
+  </p>
+<div class="source"><pre>
+#if( $jazz )
+    Vyacheslav Ganelin
+#end
+</pre>
+</div>
+<p>
+  Jos <em>$jazz</em> on tosi (true), tuloste on
+  </p>
+<div class="source"><pre>
+Vyacheslav Ganelin
+</pre>
+</div>
+<p>
+  Jos <em>$jazz</em> on epätosi (false), tulostetta ei
+  tule. Skriptielementtien suojaaminen muuttaa tulostetta. Katso
+  seuraavaa esimerkkiä:
+  </p>
+<div class="source"><pre>
+\#if( $jazz )
+    Vyacheslav Ganelin
+\#end
+</pre>
+</div>
+<p>
+  Riippumatta siitä onko <em>$jazz</em> tosi vai epätosi, tuloste on
+  aina:
+  </p>
+<div class="source"><pre>
+ #if($ jazz )
+     Vyacheslav Ganelin
+ #end
+ </pre>
+</div>
+<p>
+  Itse asiassa koska kaikki skriptielementit on suojattu,
+  <em>$jazz</em> muuttujan totuusarvoa ei edes tutkita. Oletetaan että
+  kenoviiva edeltää skriptielementtejä jotka on suojattu:
+  </p>
+<div class="source"><pre>
+\\#if( $jazz )
+   Vyacheslav Ganelin
+\\#end
+</pre>
+</div>
+<p>
+  Mikäli <em>$jazz</em> on tässä tapauksessa tosi, tuloste on:
+  </p>
+<div class="source"><pre>
+\ Vyacheslav Ganelin
+\
+</pre>
+</div>
+<p>
+  Tämän ymmärtämiseksi huomaa, että <code>#if( arg )</code> rivillä
+  olevaa rivinvaihtoa (return) ei kopioida tulosteeseen. Tämän vuoksi
+  <code>#if()</code> lauseen runko ('Vyacheslav Ganelin') on '\\'
+  merkinnästä saadun ensimmäisen '\' merkin kanssa samalla
+  rivillä. Jälkimmäinen '\' merkki on toisella rivillä kuin teksti,
+  koska tekstin lopussa on rivinvaihto ja jälkimmäinen '\\'
+  merkinnästä saatu '\' merkki on ennen <code>#end</code> ohjetta,
+  joten merkki kuuluu edelleen <code>#if()</code> lauseen runkoon.
+  </p>
+<p>
+  Jos <em>$jazz</em> on epätosi, tuloste on:
+  </p>
+<div class="source"><pre>
+\
+</pre>
+</div>
+<p>
+  Huomaa että
+  ongelmia tulee mikäli skriptielementtejä ei ole suojattu oikein.
+  </p>
+<div class="source"><pre>
+\\\#if( $jazz )
+    Vyacheslave Ganelin
+\\#end
+</pre>
+</div>
+<p>
+  Esimerkissä <em>#if</em> on suojattu, mutta <em>#end</em> elementti
+  on edelleen käytössä. Liian monta lopetuselementtiä sivupohjassa
+  aiheuttaa virheen sivua luotaessa.
+  </p>
+</div>
+<div class="section"><h2><a name="VTL:_Muotoilu"></a>VTL: Muotoilu</h2>
+<p>
+    Vaikka tässä ohjeessa oleva VTL on usein muotoiltu rivivaihdoin ja
+    välilyönnein, alla oleva VTL
+    </p>
+<div class="source"><pre>
+#set( $imperial = 
[&quot;Munetaka&quot;,&quot;Koreyasu&quot;,&quot;Hisakira&quot;,&quot;Morikune&quot;]
 )
+#foreach( $shogun in $imperial )
+    $shogun
+#end
+</pre>
+</div>
+<p>
+    on yhtä toimiva kuin seuraava kodinpätkä jonka Geir Magnusson
+    Jr. lähetti Velocityn käyttäjien postituslistalle:
+    </p>
+<div class="source"><pre>
+Send me #set($foo = [&quot;$10 and &quot;,&quot;a cake&quot;])#foreach($a in 
$foo)$a #end please.
+</pre>
+</div>
+<p>
+    Velocity syö ylimääräiset välilyönnit. Edellinen koodinpätkä
+    voitaisiin kirjoittaa seuraavasti:
+    </p>
+<div class="source"><pre>
+Send me
+#set( $foo = [&quot;$10 and &quot;,&quot;a cake&quot;] )
+#foreach( $a in $foo )
+$a
+#end
+please.
+</pre>
+</div>
+<p>
+    tai
+    </p>
+<div class="source"><pre>
+Send me
+#set($foo       = [&quot;$10 and &quot;,&quot;a cake&quot;])
+                 #foreach           ($a in $foo )$a
+         #end please.
+</pre>
+</div>
+<p>
+    Kussakin tapauksessa tulos on sama.
+    </p>
+</div>
+<div class="section"><h2><a name="Muita_ominaisuuksia_ja_sekalaista"></a>Muita 
ominaisuuksia ja sekalaista</h2>
+<div class="section"><h3><a name="Matematiikka"></a>Matematiikka</h3>
+<p>
+    Velocitylla on muutamia sisäänrakennettuja matemaattisia
+    funktioita joita voidaan käyttää sivupohjissa <em>#set</em> ohjeen
+    kanssa. Seuraavat yhtälöt ovat esimerkkejä yhteen-, vähennys-,
+    kerto- sekä jakolaskuista.
+  </p>
+<div class="source"><pre>
+#set( $foo = $bar + 3 )
+#set( $foo = $bar - 4 )
+#set( $foo = $bar * 6 )
+#set( $foo = $bar / 2 )
+</pre>
+</div>
+<p>
+    Kun kaksi kokonaislukua jaetaan keskenään, tuloksena on
+    kokonaisluku, jonka arvo on jakolaskun kokonaisosa.
+    Jakojäännös voidaan laskea modulo-operaattorilla
+    (<em>%</em>).
+  </p>
+<div class="source"><pre>
+#set( $foo = $bar % 5 )
+</pre>
+</div>
+<p>
+    Velocityllä on sisäänrakennettu keino nollalla jakamisen
+    käsittelemiseen. Seuraavassa esimerkissä:
+  </p>
+<div class="source"><pre>
+#set( $foo = 5 )
+#set( $bar = $foo - 5 )
+#set( $uhoh = $foo / $bar )
+$uhoh
+</pre>
+</div>
+<p>
+    Viittaukseen <em>$uhoh</em> asetetaan tulos operaatiosta viisi
+    jaettuna nollalla. Kun Velocity näyttää tämän sivupohjan, tuloste
+    on:
+  </p>
+<div class="source"><pre>
+$uhoh
+</pre>
+</div>
+<p>
+    Suunnittelijoiden on otettava huomioon myös, että <em>#set</em>
+    tuottaa merkkijonoja, jotka on muunnettava kokonaisluvuiksi jotta
+    niitä voidaan käyttää vaihteluväliä määritettäessä (range
+    operator). Seuraavassa esimerkki tällaisesta muunnoksesta:
+  </p>
+<div class="source"><pre>
+#set($a = &quot;7&quot;)
+#set($b = $int.valueOf($a) + 10)
+$b
+</pre>
+</div>
+<p>
+    Tuloksena on <em>17</em>.
+  </p>
+</div>
+<div class="section"><h3><a 
name="Vaihteluväli_Range_Operator"></a>Vaihteluväli (Range Operator)</h3>
+<p>
+    Vaihteluväliä voidaan käyttää <em>#set</em> ja <em>#foreach</em>
+    lauseiden yhteydessä. Vaihteluväli tuottaa kokonaislukuja
+    sisältäviä oliotaulukoita seuraavalla tavalla:
+  </p>
+<div class="source"><pre>
+[n..m]
+</pre>
+</div>
+<p>
+    Sekä <em>n</em> että <em>m</em> pitää olla tai niiden tulee
+    tuottaa kokonaislukuja. Mikäli <em>m</em> on pienempi kuin
+    <em>n</em> lasketaan vaihteluvälin luvut alaspäin. Seuraavassa
+    esimerkkejä vaihteluvälin käytöstä:
+  </p>
+<div class="source"><pre>
+Ensimmäinen esimerkki:
+#foreach( $foo in [1..5] )
+$foo
+#end
+
+Toinen esimerkki:
+#foreach( $bar in [2..-2] )
+$bar
+#end
+
+Kolmas esimerkki:
+#set( $arr = [0..1] )
+#foreach( $i in $arr )
+$i
+#end
+
+Neljäs esimerkki:
+[1..3]
+</pre>
+</div>
+<p>
+    Tuottaa seuraavan tulosteen:
+  </p>
+<div class="source"><pre>
+Ensimmäinen esimerkki:
+1 2 3 4 5
+
+Toinen esimerkki:
+2 1 0 -1 -2
+
+Kolmas esimerkki:
+0 1
+
+Neljäs esimerkki:
+[1..3]
+</pre>
+</div>
+<p>
+    Huomaa että vaihteluvälioperaattori tuottaa taulukon vain kun sitä
+    käytetään <em>#set</em> tai <em>#foreach</em> ohjeiden kanssa,
+    kuten neljännestä esimerkistä käy selville.
+  </p>
+<p>
+    Vaihteluvälioperaattori on erityisen käyttökelpoinen kun halutaan
+    tehdä verkkosivun taulukko standardikokoiseksi, mutta joissain
+    tapauksissa taulukon täyttämiseksi ei ole riittävästi dataa.
+  </p>
+</div>
+<div class="section"><h3><a 
name="Edistyneet_kysymykset:_Suojaaminen_ja_"></a>Edistyneet kysymykset: 
Suojaaminen ja !</h3>
+<p>
+    Kun viittaus hiljennetään <em>!</em> merkillä ja <em>!</em> merkkiä
+    edeltää suojausmerkki <em>\</em> käsitellään viittaus erityisellä
+    tavalla. Huomaa erot normaalin suojauksen ja tilanteen jossa
+    <em>\</em> edeltää <em>!</em> merkkiä, välillä.
+  </p>
+<div class="source"><pre>
+#set( $foo = &quot;bar&quot; )
+$\!foo
+$\!{foo}
+$\\!foo
+$\\\!foo
+</pre>
+</div>
+<p>
+   Tulosteena on:
+  </p>
+<div class="source"><pre>
+$!foo
+$!{foo}
+$\!foo
+$\\!foo
+</pre>
+</div>
+<p>
+   Vertaa tätä normaaliin suojaukseen, jossa <em>\</em> on <em>$</em>
+   merkin edellä:
+  </p>
+<div class="source"><pre>
+\$foo
+\$!foo
+\$!{foo}
+\\$!{foo}
+</pre>
+</div>
+<p>
+    Tulosteena on:
+  </p>
+<div class="source"><pre>
+$foo
+$!foo
+$!{foo}
+\bar
+</pre>
+</div>
+</div>
+<div class="section"><h3><a name="Yleistä_Velocimakroista"></a>Yleistä 
Velocimakroista</h3>
+<p>
+Tämä osio on Velocimakroaiheinen mini-FAQ. Osio muuttuu ajan myötä,
+joten uutta tietoa hakevien kannattanee palata sivulle aika ajoin.
+</p>
+<p>
+Huom! : Tässä osiossa 'Velocimakro':ihin viitataan usein lyhenteellä
+'VM'.
+</p>
+<strong>Voinko käyttää ohjetta tai toista VM:a argumenttina
+VM:oon?</strong><p>
+Esimerkki : <code>#center( #bold(&quot;hello&quot;) )</code></p>
+<p>
+Et. Ohje ei ole sallittu argumentti ohjeelle, ja VM on
+käytännöllisesti katsoen ohje.
+</p>
+<p><i>Kuitenkin...</i>, voit kiertää rajoituksen. Yksinkertainen ratkaisu
+on käyttää hyväksi sitä että lainausmerkeissä (&quot;) oleva teksti
+tulkitaan. Tämä ansiosta voit tehdä seuraavasti:
+</p>
+<div class="source"><pre>
+#set($stuff = &quot;#bold('hello')&quot; )
+#center( $stuff )
+</pre>
+</div>
+<p>
+Voit myös säästää rivin...
+</p>
+<div class="source"><pre>
+#center( &quot;#bold( 'hello' )&quot; )
+</pre>
+</div>
+<p>
+Huomaa että jälkimmäisessä esimerkissä parametri käsitellään VM:n
+<i>sisällä</i>, ei kutsun tasolla. Toisin sanoen VM:lle annettu
+parametri siirretään kokonaisuudessaan ja käsitellään VM:ssa johon se
+siirrettiin. Tämän ansiosta voit tehdä esimerkiksi seuraavaa:
+</p>
+<div class="source"><pre>
+
+#macro( inner $foo )
+  inner : $foo
+#end
+
+#macro( outer $foo )
+   #set($bar = &quot;outerlala&quot;)
+   outer : $foo
+#end
+
+#set($bar = 'calltimelala')
+#outer( &quot;#inner($bar)&quot; )
+
+</pre>
+</div>
+<p>
+Tulosteeksi tulee
+</p>
+<div class="source"><pre>
+Outer : inner : outerlala
+</pre>
+</div>
+<p>
+koska parametrin &quot;#inner($bar)&quot; tulkitseminen tapahtuu lauseen
+#outer() sisällä, käytetään muuttujan $bar arvoa joka asetettiin
+#outer VM:ssa.
+</p>
+<p>
+Tämä on tarkoituksellinen ja tarkkaan vaalittu ominaisuus - parametrit
+siirretään 'nimen mukaan' ('by name') VM:oon, jotta voit siirtää
+VM:oon tilansa muistavia (stateful) viittauksia kuten
+</p>
+<div class="source"><pre>
+#macro( foo $vari )
+  &lt;tr bgcolor=$vari&gt;&lt;td&gt;Hei&lt;/td&gt;&lt;/tr&gt;
+  &lt;tr bgcolor=$vari&gt;&lt;td&gt;Siellä&lt;/td&gt;&lt;/tr&gt;
+#end
+
+#foo( $bar.rivinVari() )
+</pre>
+</div>
+<p>
+jossa rivinVari() metodia kutsutaan toistuvasti, ei vain kerran. Sen
+välttämiseksi kutsu metodia VM:n ulkopuolelta ja siirrä arvo VM:oon.
+</p>
+<div class="source"><pre>
+#set($vari = $bar.rivinVari())
+#foo( $vari )
+</pre>
+</div>
+<strong>Voinko rekisteröidä Velocimakroja #parse() :n kautta?
+</strong><p>
+    Nykyisellään Velocimakrot tulee olla määriteltyinä ennen
+    ensimmäistä käyttöä. Tämä tarkoittaa sitä että #macro()
+    määritystesi tulisi tulla ennen kuin käytät Velocimakroja.
+    </p>
+<p>
+    Tämä on tärkeää muistaa jos yrität käyttää ohjetta #parse()
+    sivupohjaan jossa on inline #macro() ohjeita. Koska #parse()
+    suoritetaan ajon aikana, ja parseri päättää ajon aikana onko
+    sivupohjassa oleva Velocimakrolta näyttävä elementti Velocimakro,
+    ei Velocimakrojen #parse():aminen toimi niin kuin
+    olettaisi. Ongelma voidaan välttää helposti käyttämällä
+    <code>velocimacro.library</code> toimintoa jonka avulla Velocity
+    lataa Velocimakrosi käynnistyksen yhteydessä.
+    </p>
+<strong>Mitä tarkoittaa Velocimakrojen automaattinen
+uudelleenlataus?</strong><p>
+   On olemassa asetus joka on tarkoitettu käytettäväksi järjestelmän
+   <i>kehityksen</i> aikana, ei käytössä olevassa järjestelmässä :
+  </p>
+<p><code>velocimacro.library.autoreload</code></p>
+<p>
+   joka on oletuksena pois käytöstä (false). Kun ominaisuus on
+   asetettu käyttöön (true) <em>yhdessä</em> asetuksen
+   </p>
+<p><code>&lt;type&gt;.resource.loader.cache = false</code></p>
+<p>
+    kanssa (jossa &lt;type&gt; on resurssilataajan nimi jota käytät,
+    kuten 'file'), silloin Velocity lataa automaattisesti
+    Velocitymakroihin tekemäsi muutokset silloin kun teet niitä, joten
+    sinun ei tarvitse käynnistää uudelleen sovellusalustaa (tai
+    ohjelmaa) tai turvautua johonkin muuhun kikkaan saadaksesi
+    muuttuneet Velocitymakrosi käyttöön.
+    </p>
+<p>
+    Yksinkertainen konfiguraatio saattaisi näyttää seuraavalta:
+    </p>
+<div class="source"><pre>
+    file.resource.loader.path = templates
+    file.resource.loader.cache = false
+    velocimacro.library.autoreload = true
+    </pre>
+</div>
+<p>
+    Älä käytä näitä asetuksia tuotantokäytössä.
+    </p>
+</div>
+<div class="section"><h3><a 
name="Merkkijonojen_yhdistäminen"></a>Merkkijonojen yhdistäminen</h3>
+<p>
+    Yleinen kehittäjien kysymä kysymys on <i>Kuinka yhdistän
+    merkkijonoja? Onko olemassa Javan '+' operaattoria vastaavaa
+    toimintoa?</i>.
+   </p>
+<p>
+    Viittausten liittämiseksi yhteen VTL:ssa, sinun tarvitsee vain
+    'laittaa ne yhteen'. Konteksti jossa yhdistät viittaukset
+    vaikuttaa tuloksiin, joten esimerkit ovat paikallaan.
+   </p>
+<p>
+    Normaalissa tapauksessa (jolloin sekoitat muuttujat sivupohjan
+    muuhun sisältöön) :
+   </p>
+<div class="source"><pre>
+       #set( $koko = &quot;Big&quot; )
+       #set( $nimi = &quot;Ben&quot; )
+
+      Kello on $iso$nimi.
+   </pre>
+</div>
+<p>
+     tulosteena on 'Kello on BigBen'. Hieman mielenkiintoisemmassa
+     tapauksessa, kuten silloin kun haluat liittää merkkijonot
+     siirrettäväksi parametrina metodille, tai asettaaksesi uuden
+     viittauksen, tee seuraavasti:
+   </p>
+<div class="source"><pre>
+      #set( $koko = &quot;Big&quot; )
+      #set( $nimi = &quot;Ben&quot; )
+
+      #set($kello = &quot;$koko$nimi&quot; )
+
+      Kello on $kello.
+    </pre>
+</div>
+<p>
+     Josta tulee sama tuloste. Viimeisenä esimerkkinä, kun haluat
+     sekoittaa 'staattisia' merkkijonoja viittauksiin, saatat joutua
+     käyttämään 'muodollista viittausten merkintää' :
+    </p>
+<div class="source"><pre>
+      #set( $koko = &quot;Big&quot; )
+      #set( $nimi = &quot;Ben&quot; )
+
+      #set($kello = &quot;${koko}Tall$nimi&quot; )
+
+      Kello on $kello.
+    </pre>
+</div>
+<p>
+      Nyt tuloste on 'Kello on BigTallBen'. Muodollista viittausten
+      merkintää käytetään, jotta parseri tietäisi että tarkoitat
+      viittauksellasi muuttujaa '$size' eikä '$sizeTall', jota se
+      käyttäisi mikäli et olisi käyttänyt '{}' merkkejä.
+    </p>
+</div>
+</div>
+<div class="section"><h2><a name="Palaute"></a>Palaute</h2>
+<p>
+    Mikäli löydät tästä ohjeesta virheitä tai haluat antaa ohjetta
+    koskevaa palautetta, ole hyvä ja lähetä sähköpostia <a 
href="mailto:[email protected]"; class="externalLink">Velocity
+    käyttäjälistalle</a>.  Kiitos!
+  </p>
+</div>
+
+      </div>
+    </div>
+    <div class="clear">
+      <hr/>
+    </div>
+    <div id="footer">
+      <div class="xright">&#169;  
+          2000-2010
+    
+          The Apache Software Foundation
+          
+  
+
+  
+    
+  
+  
+    
+             Last Published: 2010-11-29 23:49:22
+            </div>
+      <div class="clear">
+        <hr/>
+      </div>
+    </div>
+  </body>
+</html>


Reply via email to