|
About
Community
Docs
Tools
Comparisons
Site Translations
|
|
Tietoja t?st? oppaasta
|
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.
Kiitos ett? valitsit Velocityn!
|
|
|
Mik? on Velocity?
|
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 JSP:lle (Java Server
Pages) ja PHP:lle.
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 Turbine web
sovelluskehykselle. Yhdess? Velocity ja Turbine tarjoavat
sivupohjaratkaisun jonka avulla web sovelluksia voidaan kehitt??
todellisen MVC -mallin mukaisesti.
|
|
|
Miten voin k?ytt?? Velocity??
|
|
Kurakauppa esimerkki
|
Oletetaan ett? olet kuraa myyv?n onlinekaupan
sivusuunnittelija. Kutsumme kauppaa "Kurakauppa
Online":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??
Velocityn avulla verkkosivut on helppo personoida k?vij?idesi
mukaan. Kurakauppa Onlinen sivusuunnittelijana haluat tehd? sivun
jonka asiakas n?kee kirjauduttuaan j?rjestelm??n.
Tapaat yrityksesi ohjelmoijat ja sovitte, ett? muuttuja
$asiakas pit?? sis?ll??n tiedot parhaillaan kirjautuneena
olevasta asiakkaasta. Muuttujassa $kuratTarjouksessa ovat
tiedot kuratyypeist? jotka ovat parhaillaan
erikoistarjouksessa. $tarjous 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.
Voisit lis?t? seuraavat VTL lauseen sivulle:
 |
 |
 |
 |
<HTML>
<BODY>
Hei $asiakas.Nimi!
<table>
#foreach( $kura in $kuratTarjouksessa )
#if ( $asiakas.onOstanut($kura) )
<tr>
<td>
$tarjous.haePromo( $kura )
</td>
</tr>
#end
#end
</table>
|
 |
 |
 |
 |
foreach 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.
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?.
|
|
|
|
|
Velocity Template Language (VTL): Johdanto
|
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.
VTL k?ytt?? viittauksia 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 lauseen avulla. Seuraavassa on esimerkki VTL
lauseesta joka voidaan lis?t? HTML -dokumenttiin:
Kuten kaikki VTL lauseet (statement), t?m?kin lause alkaa #
merkill? ja sis?lt?? ohjeen (directive): set. Kun verkkosivun
k?ytt?j? hakee sivun Velocity etsii sivupohjastasi kaikki
# -merkit. Sitten se tulkitsee mitk? niist? merkitsev?t
VTL lausetta, ja mitk? # merkeist? ovat osa sivujesi
normaalia HTML -koodia, eiv?tk? kuulu VTL -koodiin.
# merkki? seuraa ohje, set. set ohjeen
j?lkeen tulee suluissa ilmaus (expression), -- yht?l? joka m??ritt??
arvon muuttujalle. Muuttuja on ilmaistu
vasemmalla ja arvo oikealla puolella. N?m? on erotettu =
merkill?.
Yll? olevassa esimerkiss? muuttuja on $a ja arvo on
Velocity. Kaikkien viittausten tapaan t?m?kin muuttuja
alkaa $ merkill?. Arvot ovat aina lainausmerkkien
sis?ll?; Velocityss? muuttujien datatyypeist? ei tule
sekaannuksia, koska vain merkkijonoja (string) voi antaa
muuttujien arvoksi.
Seuraava nyrkkis??nt? voi auttaa ymm?rt?m??n Velocityn toimintaa:
Viittaukset alkavat $ merkill? ja niit? k?ytet??n
jonkin hakemiseen. Ohjeet alkavat # merkill? ja niit?
k?ytet??n jonkin suorittamiseen.
Yll? olevassa esimerkiss? #set -ohjetta k?ytet??n arvon
m??ritt?miseksi muuttujaan. Muuttujaa $a voidaan t?m?n
j?lkeen k?ytt?? sivupohjassa tulostamaan "Velocity".
|
|
|
Viittaukset
|
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.
Kaikkea viittauksissa olevaa ja niihin m??ritelt?v?? tietoa
k?sitell??n tekstityyppisen?. Jos on esimerkiksi m??ritelty
objekti $foo (Integer objekti), Velocity kutsuu objektin
.toString() metodia objektin arvon muuntamiseksi
tekstityyppiseksi.
Muuttujat
Muuttujan lyhyt merkint?tapa koostuu ensimm?isen? olevasta "$"
merkist?, jonka j?lkeen tulee VTL tunniste. VTL
tunnisteen on alettava aakkosnumeerisella merkill? (a..z tai
A..Z). Muuttujan loput merkit ovat rajoitettu seuraaviin:
- aakkoset (a .. z, A .. Z)
- numerot (0 .. 9)
- viiva ("-")
- alaviiva ("_")
Seuraavassa muutamia esimerkkej? toimivista muuttujaviittauksista:
 |
 |
 |
 |
$foo
$kuraLinko
$kura-linko
$kura_linko
$kuraLinko1
|
 |
 |
 |
 |
Kun VTL viittaa muuttujaan, kuten $foo, muuttuja voi
saada arvonsa joko sivupohjassa olevalta set ohjeelta,
tai java -koodista. Jos esimerkiksi javamuuttujalla $foo
on arvo bar silloin kun sivupohjaa haetaan, bar
korvaa kaikki $foo muuttujan esiintymiskohdat web
sivulla. Toisaalta jos sivulle lis?t??n lause
Sivun tuloste on sama kaikilla $foo muuttujan
esiintymiskohdille jotka tulevat t?m?n lauseen j?lkeen.
Ominaisuudet
Toinen VTL:n viittaustyyppi ovat ominaisuudet joilla on oma
tunnusomainen muotonsa. Lyhyt merkint?tapa muodostuu ensimm?isen?
olevasta $ merkist?, jonka j?lkeen tulee VTL tunniste,
jota seuraa piste (".") ja toinen VTL tunniste. Seuraavassa on
esimerkkej? toimivista ominaisuusviittauksista:
 |
 |
 |
 |
$asiakas.Osoite
$ostos.Summa
|
 |
 |
 |
 |
K?sittelemme ensimm?isen esimerkin $asiakas.Osoite
tarkemmin. Viittauksella voi olla kaksi merkityst?. Se saattaa
tarkoittaa; hae asiakas nimisest? hashtable taulukosta
arvo joka on liitetty avaimelle Osoite. Toisaalta
$asiakas.Osoite voi my?s viitata metodiin (k?sittelemme
metodeihin viittaavat viittaukset seuraavassa kappaleessa);
$asiakas.Osoite saattaa olla lyhennetty muoto
viittauksesta $asiakas.getOsoite(). Velocity tulkitsee
sivua haettaessa kumpaa n?ist? vaihtoehdoista tarkoitetaan, ja
palauttaa vastaavan arvon.
Metodit
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 "$" merkist?, jota seuraa VTL tunniste, jonka j?lkeen
tulee VTL Metodirunko. VTL Metodirunko koostuu VTL
tunnisteesta jota seuraa vasen sulkumerkki "(", jota seuraa
valinnainen parametrilista, jota seuraa oikeanpuoleinen
sulkumerkki ")". Seuraavassa on esimerkkej? toimivista
metodiviittauksista:
 |
 |
 |
 |
$asiakas.getOsoite()
$ostos.getSumma()
$sivu.setOtsake( "Minun kotisivuni" )
$henkilo.setOminaisuudet( ["Outo", "Kummallinen", "Innostunut"] )
|
 |
 |
 |
 |
Metodirungossa esiintyv? get tarkoittaa "hae" ja set "aseta".
Kaksi ensimm?ist? esimerkki? -- $asiakas.getOsoite() ja
$ostos.getSumma() -- n?ytt?v?t samanlaisilta kuin
Ominaisuudet -osiossa aiemmin; $asiakas.Osoite ja
$ostos.Summa. Jos arvasit ett? n?ill? esimerkeill? on
jotakin yhteytt? toisiinsa, olit oikeassa!
VTL ominaisuuksia voidaan k?ytt?? lyhyempin? muotoina VTL
metodeista. Ominaisuudella $asiakas.Osoite on t?ysin sama
vaikutus kuin k?ytt?m?ll? metodia
$asikas.getOsoite(). 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.
Seuraavien metodien kanssa voidaan k?ytt?? lyhytt? muotoa:
 |
 |
 |
 |
$aurinko.getPlaneetat()
$mato.getMulta()
$albumi.getValokuva()
|
 |
 |
 |
 |
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:
 |
 |
 |
 |
$aurinko.getPlaneetat( ["Maa", "Mars", "Neptunus"] )
## lyhyess? muodossa $sun.Planets ei voida antaa parametreja
$sisyphus.pushRock()
## Velocity olettaa ett? tarkoitan $sisyphus.getRock()
$kirja.setOtsake( "Catalonian kotisivu" )
## Parametrilistaa ei voida antaa
|
 |
 |
 |
 |
Muodollinen viittausten merkint?
Edellisiss? esimerkeiss? k?ytettiin viittauksille lyhytt?
merkint?tapaa. Viittauksille on olemassa my?s muodollinen
merkint?tapa, jota k?ytet??n seuraavissa esimerkeiss?:
 |
 |
 |
 |
${kuraLinko}
${asiakas.Osoite}
${osto.getSumma()}
|
 |
 |
 |
 |
Voit k?ytt?? lyhytt? muotoa viittauksiin l?hes aina, mutta
joissain tapauksissa muodollista viittausta tarvitaan virheett?m?n
toiminnan turvaamiseksi.
Oletetaan ett? olet luomassa lausetta jonka sis?lt? riippuu
muuttujasta. Muuttujaa $pahe k?ytet??n pohjana luotaessa
muuttujasta riippuvaista sanaa. Tarkoituksena on sallia k?ytt?j?n
valita pohjasana ja tuottaa toinen seuraavista tuloksista: "Juha
on pyromaani." tai "Juha on kleptomaani.". T?ss? tapauksessa
lyhyen viittausmuodon k?ytt?minen ei toimisi. Tutki seuraavaa
esimerkki?:
Velocity olettaa ett? tarkoitat muuttujaa $pahemaani,
vaikka k?ytett?v? muuttuja oli $pahe. Koska Velocity ei
l?yd? arvoa muuttujalle $pahemaani, se palauttaa
$pahemaani. T?m? ongelma voidaan ratkaista k?ytt?m?ll?
muodollista viittausta.
Nyt Velocity ymm?rt?? ett? haluttu viittaus on $pahe, ei
$pahemaani. Muodollinen viittausten merkint? on usein
hy?dyllinen silloin kun viittaukset ovat kiinni muussa tekstiss?.
Hiljainen viittausten merkint?
Kun Velocitylt? haetaan viittaus jolle ei ole m??ritelty arvoa,
palauttaa se normaalisti viittauksen tekstin?. Oletetaan
esimerkiksi ett? seuraavat viittaukset ovat osa VTL sivupohjaa:
 |
 |
 |
 |
<input type="text" name="email" value="$email"/>
|
 |
 |
 |
 |
Kun lomake latautuu ensimm?isen kerran muuttujaviittauksella
$email ei ole arvoa. Oletuksena Velocity t?ytt??
lomakkeen tekstill? "$email". Haluaisit kuitenkin kentt??n
mieluummin tyhj?n arvon. K?ytt?m?ll? hiljaista viittausten
merkint?? voidaan Velocityn normaali toiminta est??;
$email koodin sijaan k?yt?t viittausta
$!email. Yll? oleva koodi n?ytt?isi siis seuraavalta:
 |
 |
 |
 |
<input type="text" name="email" value="$!email"/>
|
 |
 |
 |
 |
Kun lomake latautuu ensimm?isen kerran eik? muuttujalla
$email ole arvoa, tulostetaankin kentt??n tyhj? teksti
"$email" tekstin sijaan.
Muodollista ja hiljaista muuttujien merkint?? voidaan k?ytt?? my?s
yhdess?;
 |
 |
 |
 |
<input type="text" name="email" value="$!{email}"/>
|
 |
 |
 |
 |
|
|
|
Kirjaimellisesti
|
VTL k?ytt?? erikoismerkkej? kuten $ ja # omassa
toiminnassaan, joten n?iden merkkien k?ytt? sivupohjassa vaatii
erityist? huolellisuutta. T?ss? kappaleessa k?sittelemme
$ merkin suojaamisen (escape).
Dollari
Seuraavassa lauseessa dollarimerkin k?yt?ss? ei ole ongelmaa:
"Ostin markkinoilta s?kin perunoita hintaan $2.50!". Kuten
mainittu, VTL tunniste alkaa aina aakkosmerkill?, joten merkint??
$2.50 ei ole vaaraa sekoittaa viittaukseksi.
VTL viittausten suojaaminen
Ongelmatilanne saattaa synty? silloin, kun Velocity ei osaa
p??tell? tarkoitetaanko dollarinmerkill? merkki? itse??n, vai
viittausta. Erikoismerkkien suojaaminen on paras keino
k?sitell? VTL erikoismerkkej? sivupohjissa. Suojaamiseen k?ytet??n
kenoviivaa ( \ ).
 |
 |
 |
 |
#set( $email = "foo" )
$email
|
 |
 |
 |
 |
Kun Velocity k?sittelee $email viittauksen
sivupohjassasi, se etsii l?ytyyk? sen nimiselle muuttujalle
arvoa. T?ss? tapauksessa tuloste tulee olemaan foo, koska
$email on m??ritelty. Jos $email muuttujaa ei
olisi m??ritelty tulisi tulosteeksi $email.
Oletetaan ett? $email on m??ritelty (sill? on esimerkiksi
arvo foo), ja ett? haluat muuttujan arvon sijaan tulostaa
sen nimen $email. T?m? saavuttamiseksi on useita keinoja,
joista helpoin on suojausmerkin k?ytt?minen.
 |
 |
 |
 |
## Seuraava rivi m??rittelee muuttujan $email t?ss? sivupohjassa:
#set( $email = "foo" )
$email
\$email
\\$email
\\\$email
|
 |
 |
 |
 |
tulosteeksi tulee
 |
 |
 |
 |
foo
$email
\$email
\\$email
|
 |
 |
 |
 |
Huomaa $ merkin eteen liitetty \
merkki. Suojausmerkit tulkitaan vasemmalta oikealle, joten
\\\$email tulostuu \\$email. Vertaa n?it?
esimerkkej? tulosteeseen joka saadaan kun $email
muuttujaa ei ole m??ritelty.
 |
 |
 |
 |
$email
\$email
\\$email
\\\$email
|
 |
 |
 |
 |
tulosteeksi tulee
 |
 |
 |
 |
$email
\$email
\\$email
\\\$email
|
 |
 |
 |
 |
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 $foo muuttujalle arvon
gibbous.
 |
 |
 |
 |
#set( $foo = "gibbous" )
$kuu = $foo
|
 |
 |
 |
 |
Tulosteeksi tulee: $kuu = gibbous -- miss? $kuu
tulostetaan muuttujan nimen?, koska sen arvoa ei ole m??ritelty ja
gibbous tulostetaan muuttujan $foo arvona.
My?s VTL ohjeiden suojaaminen on mahdollista; t?m? kuvataan
tarkemmin Ohjeet -kappaleessa.
|
|
|
Ohjeet
|
Ohjeet 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.
#set
#set 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?:
 |
 |
 |
 |
#set( $kadellinen = "apina" )
#set( $asiakas.Kayttaytyminen = $kadellinen )
|
 |
 |
 |
 |
M??rityksen vasemman puolen (left hand side, LHS) tulee olla
muuttuja- tai ominaisuusviittaus. Oikea puoli (right hand side,
RHS) voi olla jokin seuraavista tyypeist?:
- Muuttujaviittaus
- Tekstivakio
- Ominaisuusviittaus
- Metodiviittaus
- Numeerinen vakio
- ArrayList taulukko
Seuraavassa esimerkit kustakin mainitusta tyypist?:
 |
 |
 |
 |
#set( $apina = $bill ) ## muuttujaviittaus
#set( $apina.Ystava = "monica" ) ## tekstivakio
#set( $apina.Syytos = $valkoinentalo.vuoto ) ## ominaisuusviittaus
#set( $apina.Suunnitelma = $spindoctor.weave($web) ) ## metodiviittaus
#set( $apina.Numero = 123 ) ## numeerinen vakio
#set( $apina.Sano = ["Ei", $minun, "vikani"] ) ## taulukko
|
 |
 |
 |
 |
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).
Oikeanpuoleinen arvo (RHS) voi olla my?s yksinkertainen
matemaattinen operaatio:
 |
 |
 |
 |
#set( $arvo = $foo + 1 )
#set( $arvo = $bar - 1 )
#set( $arvo = $foo * $bar )
#set( $arvo = $foo / $bar )
|
 |
 |
 |
 |
Jos m??rityksen oikeanpuoleinen ominaisuus- tai metodiviittaus on
arvoa null, sit? ei 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:
 |
 |
 |
 |
#set( $tulos = $kysely.kriteeri("nimi") )
Ensimm?isen kyselyn tulos on $tulos
#set( $tulos = $kysely.kriteeri("osoite") )
Toisen kyselyn tulos on $tulos
|
 |
 |
 |
 |
Jos $kysely.kriteeri("nimi") palauttaa merkkijonon
"pete", ja $kysely.kriteeri("osoite") palauttaa arvon
null, on esimerkin tuloste seuraava:
 |
 |
 |
 |
Ensimm?isen kyselyn tulos on pete
Toisen kyselyn tulos on pete
|
 |
 |
 |
 |
T?ll? on vaara h?m?t? aloittelijoita jotka muodostavat
#foreach silmukoita joissa yritet??n asettaa
#set ohjeella viittausta ominaisuus- tai
metodiviittauksella, ja sen j?lkeen testataan tuota viittausta
#if ohjeella. Esimerkiksi:
 |
 |
 |
 |
#set( $kriteerit = ["nimi", "osoite"] )
#foreach( $kriteeri in $kriteerit )
#set( $tulos = $kysely.kriteerit($kriteeri) )
#if( $tulos )
Kysely onnistui
#end
#end
|
 |
 |
 |
 |
Yll? olevassa esimerkiss? ei kannata luottaa $tulos
muuttujan vertaamiseen kyselyn onnistumisen selville
saamiseksi. Kun $tulos on asetettu #set
ohjeella (lisatty kontekstiin), sit? ei voida asettaa
null:iksi (poistaa kontekstista). #if ja
#foreach ohjeet k?sitell??n tarkemmin my?hemmin t?ss?
dokumentissa.
Yksi ratkaisu ongelmaan olisi asettaa $tulos etuk?teen
arvoon false (ep?tosi). T?m?n j?lkeen jos kutsu
$kysely.kriteeri() ep?onnistuu, voit tarkastaa arvon.
 |
 |
 |
 |
#set( $kriteerit = ["nimi", "osoite"] )
#foreach( $kriteeri in $kriteeri )
#set( $tulos = false )
#set( $tulos = $kysely.kriteerit($kriteeri) )
#if( $tulos )
Kysely onnistui
#end
#end
|
 |
 |
 |
 |
Muutamista muista Velocityn ohjeista poiketen, #set ohje
ei k?yt? #end lausetta.
Tekstivakiot
#set ohjetta k?ytett?ess? lainausmerkkeihin (" ")
suljettu teksti tulkitaan ja tulostetaan kuten seuraavasta
esimerkist? k?y ilmi:
 |
 |
 |
 |
#set( $hakemistoJuuri = "www" )
#set( $sivupohjaNimi = "index.vm" )
#set( $sivupohja = "$hakemistoJuuri/$sivupohjaNimi" )
$sivupohja
|
 |
 |
 |
 |
Tulosteeksi tulee
Jos teksti on suljettu hipsuihin (' '), sit? ei tulkita:
 |
 |
 |
 |
#set( $foo = "bar" )
$foo
#set( $blargh = '$foo' )
$blargh
|
 |
 |
 |
 |
Tulkitsemattoman tekstin tulostaminen hipsumerkkien sis?ll?
olevavasta tekstist? on oletuksena k?yt?ss?
Velocityss?. Oletusarvo voidaan muuttaa vaihtamalla
velocity.properties siten ett?
stringliterals.interpolate=false.
|
|
|
If-Else ehtolauseet
|
If / ElseIf / Else
#if ohjeen avulla voidaan teksti sis?llytt?? web
sivulle sill? ehdolla ett? if lauseen arvo on
tosi. Esimerkiksi:
 |
 |
 |
 |
#if( $foo )
<strong>Velocity!</strong>
#end
|
 |
 |
 |
 |
Muuttuja $foo testataan jotta n?hd??n onko se tosi,
joka tapahtuu kahdessa eri tapauksessa: (i) $foo on
boolean arvo (tosi/ep?tosi) jolla on tosi -arvo, tai (ii) arvo
on eri kuin null (eli muuttuja ei ole tyhj?). #if ja
#end lauseiden v?liin j??v? sis?lt? tulostetaan mik?li
testimuuttuja on tosi. Esimerkkitapauksessamme, jos muuttujalla
$foo on null arvo, tai jos se on boolean ep?tosi, on
testimuuttuja ep?tosi, eik? tulostetta tule lainkaan.
#if ja #end lauseiden v?liss? oleva teksti
tulee tulosteeksi mik?li ehto on tosi. T?ss? tapauksessa jos
$foo on tosi, tulosteeksi tulee:
"Velocity!". Toisaalta, mik?li $foo on ep?tosi, on my?s
ehtolause ep?tosi eik? tulostetta tule.
#elseif tai #else elementtej? voidaan k?ytt??
#if elementin kanssa. Huomaa, ett? Velocityn
sivumoottori lopettaa ensimm?isen tosiarvon saaneen
testimuuttujan kohdalla. Oletetaan seuraavassa esimerkiss? ett?
muuttujalla $foo on arvo 15 ja muuttujalla
$bar on arvo 6.
 |
 |
 |
 |
#if( $foo < 10 )
<strong>Mene pohjoiseen</strong>
#elseif( $foo == 10 )
<strong>Mene it??n</strong>
#elseif( $bar == 6 )
<strong>Mene etel??n</strong>
#else
<strong>Mene l?nteen</strong>
#end
|
 |
 |
 |
 |
T?ss? esimerkiss? $foo on suurempi kuin 10, joten
kaksi ensimm?ist? vertailua eiv?t ole tosia. Seuraavaksi muuttujaa
$bar verrataan lukuun 6, joka on tosi, joten tulosteeksi
tulee Mene etel??n.
Huomaa, ett? nykyisell??n Velocityn numeeriset vertailut on
rajoitettu Integer (kokonais-) lukuihin. Kaikki muut arvot
tulkitaan ep?tosiksi. Ainoa poikkeus t?h?n on vastaavuus
'==', jolloin Velocity vaatii ett? objektit vertailun kummallakin
puolella ovat samaa luokkaa.
Relaatio- ja
loogiset operaattorit
Velocity k?ytt?? vastaavuusoperaattoria muuttujien v?listen
suhteiden tulkitsemiseen. Seuraavassa on yksinkertainen esimerkki
vastaavuusoperaattorin k?yt?st?.
 |
 |
 |
 |
#set ($foo = "deoksiribonukleiinihappo")
#set ($bar = "ribonukleiinihappo")
#if ($foo == $bar)
Muuttujat eiv?t selv?stik??n ole samanlaiset. Joten...
#else
Vastaavuusvertaus on ep?tosi, ja t?m? teksti tulee tulosteeksi.
#end
|
 |
 |
 |
 |
Velocity tukee my?s loogisia AND ja OR
operaattoreita. Lis?tietoja l?yd?t dokumentista VTL Reference Guide. Alla on
esimerkkilause joka k?ytt?? loogista AND:i?.
 |
 |
 |
 |
## looginen AND
#if( $foo && $bar )
<strong> T?m? JA tuo</strong>
#end
|
 |
 |
 |
 |
If lause on tosi vain mik?li sek? $foo ett?
$bar ovat tosia. Jos $foo on ep?tosi, tulee
lauseesta ep?tosi eik? $bar muuttujaa tarvitse edes
testata. Jos $foo on tosi, testataan sen j?lkeen
muuttujan $bar arvo; jos my?s $bar on tosi,
silloin koko ilmaus on tosi ja T?m? JA tuo
tulee tulosteeksi. Jos $bar on ep?tosi, silloin koko
ilmaus on ep?tosi eik? tulostetta tule.
Looginen OR operaattori toimii samaan tapaan, paitsi ett? vain
toisen viittauksen pit?? olla tosi jotta koko ilmaus olisi
tosi. Katso seuraavaa esimerkki?.
 |
 |
 |
 |
## looginen OR
#if( $foo || $bar )
<strong>T?m? TAI tuo</strong>
#end
|
 |
 |
 |
 |
Jos $foo on tosi, ei $bar muuttujaa tarvitse
edes testata. Oli $bar sitten tosi tai ep?tosi, koko
lauseke on tosi, ja T?m? TAI tuo on
tulosteena. Toisaalta mik?li $foo on ep?tosi, on
muuttujan $bar arvo testattava. Jos t?ss? tapauksessa
my?s $bar on ep?tosi, koko ilmauksesta tulee ep?tosi
eik? tulostetta tule. Jos $bar on tosi, silloin koko
ilmauksesta tulee tosi, ja tulosteena on T?m? TAI
tuo.
Loogisella EI (NOT) operaattorilla on vain yksi argumentti :
 |
 |
 |
 |
## looginen NOT
#if( !$foo )
<strong>EI tuota</strong>
#end
|
 |
 |
 |
 |
Jos $foo on tosi, silloin !$foo on ep?tosi, eik?
tulostetta t?m?n vuoksi tule. Mik?li $foo on ep?tosi,
silloin !$foo on tosi ja EI tuota on
tulosteena. ?l? sekoita t?t? merkint?? hiljaiseen viittaukseen
$!foo joka tarkoittaa jotakin aivan muuta.
|
|
|