1. È¡µÃÓïÒåGetting literal
VTL ÌØ±ðµÄ×Ö·û£¬±ÈÈç$ ºÍ #£¬ À´×öÕâ¸ö¹¤×÷£¬Òò´ËÔÚÄ£°åÖÐʹÓÃÕâЩ×Ô¸ºµÄʱºò±ØÐë¸ñÍâСÐÄ¡£±¾½Ú½²Êö$ µÄתÒå¡£
1.1. »õ±Ò
ÎÒÃÇдϾä×Ó
"I bought a 4 lb. sack of potatoes at the farmer's market for only
$2.50!" £¬ÕⲢûÓÐʲôÎÊÌâ¡£µ«ÈçǰËùÊö£¬VTL±êʶ·û×ÜÊÇÒÔ´óд»òÊÇСд×Öĸ¿ªÊ¼£¬ËùÒÔ$2.50 ÔÚÒýÓÃÖн«²»Äܳö´í¡£
1.2. תÒåÓÐЧµÄVTL ÒýÓÃ
ÎÊÌ⽫»á³öÏÖ£¬ÒòΪVelocity ½«ÓÐÒ»¸öDZÔڵijåÍ»¡£×ªÒåÌØÊâ×Ö·ûÊÇ´¦ÀíVTLÄ£°åÖÖÌØÊâ×Ö·ûµÄ×îºÃµÄ°ì·¨£¬Õß¿ÉÒÔÓÃÒ»¸ö·´Ð±ÏßÀ´½øÐС£
|
foo
$email
\foo
\$email |
Èç¹û Velocity ÔÚVTLÄ£°åÖÐÓöµ½Ò»¸ö$emailÒýÓã¬Ëû½«ÔÚÉÏÏÂÎÄÖвéÕÒÏàÓ¦µÄÖµ¡£ÕâÀÊä³ö½«ÊÇfoo£¬ÒòΪ $email ÊǶ¨ÒåÁ˵ġ£Èç¹û$email 䶨Ò壬Êä³ö½«ÊÇ$email ¡£
¼ÙÉè$email ÊǶ¨ÒåÁ˵썱ÈÈ磬¾ßÓÐÖµfoo)£¬µ«ÊÇÄãÏëÊä³ö $email¡£¿ÉÒÔÓм¸ÖÖ·½·¨À´×öÕâ¸öÊÂÇ飬²»ÊÇ×î¼òµ¥µÄÊÇʹÓÃתÒå·û¡£
|
## The following line defines $email in this template:
#set( $email = "foo" )
$email
\$email
\\$email
\\\$email |
½«Êä³öÊÇ
|
foo
$email
\foo
\$email |
×¢Ò⣺ \ °ó¶¨ÔÚ$ µÄ×ó±ß¡£´Ó×ö°ó¶¨ÔÔòʹ\\\$email ±»½âÊÍΪ\\$email¡£ ºÍÉÏÃæÀý×ӱȽÏÏÂÃæµÄÀý×Ó£¬ÕâÀï$email 䶨Òå¡£
|
$email
\$email
\\$email
\\\$email |
Êä³ö
|
$email
\$email
\\$email
\\\$email |
×¢Ò⣬Velocity ´¦Àí¶¨ÒåºÍ䶨ÒåµÄÒýÓÃÊDz»Í¬µÄ¡£ÏÂÃæÒ»¸öset Ö¸Á$foo ÉèΪֵgibbous.¡£
|
#set( $foo = "gibbous" )
$moon = $foo |
Êä³ö½«ÊÇ$moon = gibbous
-- ÕâÀï $moon ×÷Ϊ×ÖÃæÊä³ö£¬ÒòΪËû²¢Ã»Óж¨Òå¡£¶øgibbous ½«ÔÚ$foo µÄλÖÃÊä³ö¡£
ÎÒÃÇÒ²¿ÉÒÔתÒåVTL Ö¸ÁÕ⽫ÔÚÖ¸ÁîÒ»½ÚÏéÊö¡£
2. Case Substitution
ÏÖÔÚÄã´óÖÂÁ˽âÁËÒýÓ㬿ÉÒÔÔÚÄ£°åÖÐʹÓÃËüÃÇÁË¡£Velocity ²ÉÓÃÁ˺ܶàJAVAÔÀíµÄÓŵ㣬ģ°åÉè¼ÆÈËÔ±»á·¢Ïַdz£ÈÝÒ×ʹÓá£ÀýÈ磺
|
$foo
$foo.getBar()
## is the same as
$foo.Bar
$data.getUser("jon")
## is the same as
$data.User("jon")
$data.getRequest().getServerName()
## is the same as
$data.Request.ServerName
## is the same as
${data.Request.ServerName} |
Õâ¸öÀý×ÓÏÔʾÁËÒýÓõÄһЩÆäËûÓ÷¨¡£Velocity ½è¼øÁËJavaµÄ×ÔÊ¡ºÍ×é¼þbeanÌØÕ÷£¬À´½â¾öÒýÓÃÃûÔÚÉÏÏÂÎÄÖÐ×÷Ϊ¶ÔÏóºÍ¶ÔÏó·½·¨µÄÎÊÌâ¡£¿ÉÒÔÔÚÄãµÄÄ£°åµÄÈκεط½²åÈëÒýÓúÍÇóÖµ¡£
Velocity, ½¨Ä£ÔÚSun Microsystems¶¨ÒåµÄBEAN¹æ·¶Ö®ÉÏ£¬ÊÇ´óСдÃô¸ÐµÄ£»¿ª·¢ÕßŬÁ¦²¶×½ºÍ¾ÀÕý¿ÉÄܳöÏÖµÄÓû§´íÎó¡£µ±·½·¨getFoo() ÔÚÄ£°åÖÐͨ¹ý$bar.fooÒýÓÃʱ£¬Velocity Ê×Ïȳ¢ÊÔ$getfoo¡£Èç¹ûʧ°Ü£¬Ëû»áÔÙ³¢ÊÔ $getFoo¡£ÀàËÆµØ£¬µ±Ò»¸öÄ£°åÒýÓõ½ $bar.Foo£¬ Velocity ½«³¢ÊÔ $getFoo() ÏÈ£¬È»ºó³¢ÊÔ getfoo()¡£
×¢Ò⣺ Ä£°åÖÐÒýÓÃʾÀý±äÁ¿µÄÎÊÌâÈÔȻûÓнâ¾ö¡£ Ö»ÓÐÒýÓõȼÛÓÚJavaBeanµÄ getter/setter ·½·¨½â¾öÁË¡£(±ÈÈç $foo.Name ½â¾öÁ˵½Àà FooµÄ getName() ʾÀý·½·¨µÄÒýÓ㬵«²»ÄÜÒýÓÃFooµÄÒ»¸ö¹«¹²ÊµÀý±äÁ¿Name)¡£
3. Ö¸Áî
ÒòΪָÁʹÓýű¾À´ÓÐЧ²Ù¿ØJAVA´úÂëµÄÊä³ö£©ÔÊÐíÒ³ÃæÉè¼ÆÔ±ÕæÕýרעÓÚÔÛµãµÄÍâ¹ÛºÍÄÚÈÝÉè¼Æ£¬ÒýÓÃÔÊÐíÄ£°åÉè¼ÆÔ±ÎªWebÒ³Ãæ²úÉú¶¯Ì¬ÄÚÈÝ¡£
3.1. #set
#set Ö¸ÁîÓÃÀ´ÎªÒýÓÃÉèÖÃÏàÓ¦µÄÖµ¡£Öµ¿ÉÒÔ±»ÖµÅɸø±äÁ¿ÒýÓûòÕßÊÇÊôÐÔÒýÓ㬶øÇÒ¸³ÖµÒªÔÚÀ¨ºÅÀïÀ¨ÆðÀ´¡£
|
#set( $primate = "monkey" )
#set( $customer.Behavior = $primate ) |
¸³ÖµµÄ×ó±ß±ØÐëÊÇÒ»¸ö±äÁ¿Ó¦ÓûòÕßÊÇÊôÐÔÒýÓá£Óұ߿ÉÒÔÊÇÏÂÃæµÄÀàÐÍÖ®Ò»£º
±äÁ¿ÒýÓÃ
×ÖÃæ×Ö·û´®
ÊôÐÔÒýÓÃ
·½·¨ÒýÓÃ
×ÖÃæÊý×Ö
Êý×éÁбí
ÕâЩÀý×ÓÑÝʾÁËÉÏÊöµÄÿÖÖÀàÐÍ£º
|
#set( $monkey = $bill ) ## variable reference
#set( $monkey.Friend = "monica" ) ## string literal
#set( $monkey.Blame = $whitehouse.Leak ) ## property reference
#set( $monkey.Plan = $spindoctor.weave($web) ) ## method reference
#set( $monkey.Number = 123 ) ##number literal
#set( $monkey.Say = ["Not", $my, "fault"] ) ## ArrayList |
×¢Ò⣺×îºóÒ»¸öÀý×ÓÖУ¬ÔÚ·½À¨ºÅ[..] Öж¨ÒåµÄÏîÄ¿¿ÉÒÔ±»ArrayList ÀඨÒåµÄ·½·¨·ÃÎÊ¡£ ±ÈÈ磬Äã¿ÉÒÔʹÓÃ$monkey.Say.get(0)·ÃÎÊÉÏÊöµÄµÚÒ»¸öÔªËØ¡£
ÓÒ±ßÒ²¿ÉÒÔÊÇÒ»¸ö¼òµ¥µÄËãÊõ±í´ïʽ:
|
#set( $value = $foo + 1 )
#set( $value = $bar - 1 )
#set( $value = $foo * $bar )
#set( $value = $foo / $bar ) |
Èç¹ûÓÒ±ßÊÇÒ»¸öÊôÐÔ»ò·½·¨ÒýÓã¬È¡ÖµÊÇNULL£¬Ëû½«²»»á¸³Öµ¸ø×ó±ß¡£Í¨¹ýÕâÖÖ»úÖÆ½«Ò»¸ö´æÔÚµÄÒýÓôÓÉÏÏÂÎÄÖÐɾ³ýÊDz»¿ÉÄܵġ£Õâ¶ÔVelocityµÄÐÂÊÖ¿ÉÄÜ»á»ìÏý¡£ÀýÈ磺
|
#set( $result = $query.criteria("name") )
The result of the first query is $result
#set( $result = $query.criteria("address") )
The result of the second query is $result |
Èç¹û£¬ $query.criteria("name") ·Å»Ø×Ö·û´®"bill"£¬¶ø$query.criteria("address") ·µ»Ø null£¬ÉÏÊöVTL ½«½âÊÍΪ£º
|
The result of the first query is bill
The result of the second query is bill |
ÕâÍùÍù»á¸øÄÇЩÏë¹¹½¨#foreachÑ»·À´ÊÔͼͨ¹ýÊôÐԺͷ½·¨ÒýÓÃÀ´ÉèÖÃÒ»¸öÒýÓõÄÐÂÊÖ´øÀ´À§»ó£¬ÏÂÃæÂíÉÏͨ¹ý#ifÖ¸Áî²âÊÔһϡ£ÀýÈ磺
|
#set( $criteria = ["name", "address"] )
#foreach( $criterion in $criteria )
#set( $result = $query.criteria($criterion) )
#if( $result )
Query was successful
#end
#end |
ÔÚÉÏÃæµÄÀý×ÓÖУ¬ÒÀ¿¿$result µÄÈ¥ÖµÀ´¾ö¶¨²éѯÊÇ·ñ³É¹¦¿ÖŲ»ÊÇÓ¢Ã÷µÄ×ö·¨¡£ µ±$result ±»#setÉèÖúó(Ìí¼Óµ½ÉÏÏÂÎÄÖÐ)£¬Ëû¾Í²»ÄÜÔÙ±»ÉèֵΪnull (´ÓÉÏÏÂÎÄÖÐɾ³ý)¡£
ÎÒÃǶԴ˵Ľâ¾ö·½·¨ÊÇÔ¤Éè$result Ϊ false¡£ È»ºóÈç¹û $query.criteria() µ÷ÓÃʧ°Ü£¬Äã¾Í¿ÉÒÔ¼ì²éÖ®¡£
|
#set( $criteria = ["name", "address"] )
#foreach( $criterion in $criteria )
#set( $result = false )
#set( $result = $query.criteria($criterion) )
#if( $result )
Query was successful
#end
#end |
²»ÏóÆäËûVelocity Ö¸Á #set Ö¸ÁîûÓÐ#end Óï¾ä¡£
3.2. ×ÖÃæ×Ö·û´®
µ±Ê¹ÓÃ#set Ö¸Áîʱ£¬À¨ÔÚË«ÒýºÅÖеÄ×ÖÃæ×Ö·û´®½«½âÎöºÍÖØÐ½âÊÍ£¬ÈçÏÂËùʾ£º
|
#set( $directoryRoot = "www" )
#set( $templateName = "index.vm" )
#set( $template = "$directoryRoot/$templateName" )
$template |
Êä³ö½«»áÊÇ£º
|
www/index.vm |
È»¶ø£¬µ±×ÖÃæ×Ö·û´®À¨ÔÚµ¥ÒýºÅÖÐʱ£¬Ëû½«²»±»½âÎö£º
|
#set( $foo = "bar" )
$foo
#set( $blargh = '$foo' )
$blargh |
Êä³öÊÇ£º
|
Bar
$foo |
ĬÈÏÇé¿öÏ£¬Ê¹Óõ¥ÒýºÅÀ´äÖȾδ½âÎöÎı¾ÔÚVelocityÊÇÓÐЧµÄ¡£ÕâÖÖÌØÕ÷¿ÉÒÔͨ¹ý±à¼velocity.properties ÖÐµÄ stringliterals.interpolate=falseÀ´¸Ä±ä¡£
3.3. Ìõ¼þ
3.4. If / ElseIf / Else
VelocityÖеÄ#if Ö¸ÁîÔÊÐíÔÚÒ³ÃæÉú³Éʱ£¬ÔÚIFÌõ¼þÎªÕæµÄÇé¿öϰüº¬Îı¾¡£ÀýÈ磺
|
#if( $foo )
<strong>Velocity!</strong>
#end |
±äÁ¿ $foo ÏÈÇóÖµ£¬ÒÔ¾ö¶¨ÊÇ·ñÎªÕæ¡£ÔÚÕâÁ½ÖÖÇé¿öÏÂÎªÕæ£º (i) $foo
ÊÇÒ»¸öÂß¼±äÁ¿²¢¾ßÓÐÕæµÄÖµ£¬»òÕß (ii) Öµ·Ç¿Õ¡£Òª¼ÇסVelocity
ÉÏÏÂÎĽö°üÀ¨¶ÔÏó£¬ËùÒÔµ±ÎÒÃÇ˵¡°²¼¶û¡±'boolean'ʱ£¬Ëû»á±»±íʾΪ¡°²¼¶ûÀࡱ(Boolean class)¡£
Õâ¶Ô¼´Ê¹ÊÇ·µ»Ø²¼¶ûÀàÐ͵ķ½·¨Ò²ÊÇÕæµÄ¡ª×ÔÊ¡¼Ü¹¹½«·µ»ØÒ»¸ö¾ßÓÐÏàͬÂß¼ÖµµÄ²¼¶ûÀà¡£
Èç¹ûÇóÖµÎªÕæÊ±£¬ #if ºÍ #end Óï¾äÖ®¼äµÄÄÚÈݽ«Êä³ö¡£ÔÚÕâÖÖÇé¿öÏ£¬Èç¹û $foo ÎªÕæ£¬Êä³ö½«ÊÇ"Velocity!"¡£Ïà·´£¬Èç¹û $foo ¾ßÓÐÒ»¸önull Öµ£¬»òÕßÂß¼¼Ù£¬Óï¾äÇóֵΪ¼Ù£¬ÔòûÓÐÊä³ö¡£
Ò»¸ö #elseif »òÕß #else Ïî¿ÉÒÔÓÃÔÚ#if Óï¾äÖС£Çë×¢Ò⣬ Velocity Ä£°åÒýÇæ½«ÔÚµÚÒ»¸öÎªÕæµÄ±í´ïʽʱֹͣ¡£ÏÂÃæµÄÀý×ÓÖУ¬¼ÙÉè$foo ¾ßÓÐÖµ15 ¶ø $bar µÈÓÚ 6¡£
|
#if( $foo < 10 )
<strong>Go North</strong>
#elseif( $foo == 10 )
<strong>Go East</strong>
#elseif( $bar == 6 )
<strong>Go South</strong>
#else
<strong>Go West</strong>
#end |
ÔÚÕâ¸öÀý×ÓÖУ¬$foo ´óÓÚ10£¬ËùÒÔÇ°ÃæÁ½¸ö±È½Ïʧ°Ü¡£½ÓÏÂÀ´±È½Ï$bar ºÍ6£¬½á¹ûÎªÕæ£¬ËùÒÔÊä³öΪGo South¡£
Çë×¢ÒâÔÚÏÖÔÚ£¬ VelocityµÄÊýÖµ±È½ÏÔ¼ÊøÎªÕûÐÍ¡ªÆäËûÀàÐͶ¼½«ÇóֵΪfalse¡£ ½öÓÐÒ»¸öÀýÍâÊǵÈÓÚ'=='£¬ÕâʱVelocity ÒªÇóµÈºÅÁ½±ßµÄ¶ÔÏó¾ßÓÐÏàͬµÄÀàÐÍ¡£
3.5. ¹ØÏµºÍÂß¼²Ù×÷·û
Velocity ʹÓõÈʽ²Ù×÷·ûÀ´¾ö¶¨Á½¸ö±äÁ¿¼äµÄ¹ØÏµ¡£ÕâÀïÊÇÒ»¸ö¼òµ¥µÄÀý×ÓÑÝʾÈçºÎʹÓõÈʽ²Ù×÷·û£º
|
#set ($foo = "deoxyribonucleic acid")
#set ($bar = "ribonucleic acid")
#if ($foo == $bar)
In this case it's clear they aren't equivalent. So...
#else
They are not equivalent and this will be the output.
#end |
Velocity Ò²¾ßÓÐÂß¼AND, OR ºÍ NOT ²Ù×÷·û¡£¸ü½øÒ»²½µÄÐÅÏ¢£¬Çë¿´VTL²Î¿¼ÊÖ²áVTL Reference Guide ¡£ÏÂÃæÊÇһЩÑÝʾÈçºÎʹÓÃÂß¼²Ù×÷·ûµÄÀý×Ó£º
|
## logical AND
#if( $foo && $bar )
<strong> This AND that</strong>
#end
|
Àý×ÓÖÐ#if() Ö¸Áî½öÔÚ$foo ºÍ$bar ¶·ÎªÕæµÄʱºò²ÅÎªÕæ¡£Èç¹û$foo Ϊ¼Ù£¬Ôò±í´ïʽҲΪ¼Ù£»²¢ÇÒ $bar ½«²»±»ÇóÖµ¡£Èç¹û $foo ÎªÕæ£¬Velocity Ä£°åÒýÇæ½«¼ÌÐø¼ì²é$bar;µÄÖµ£¬Èç¹û $bar ÎªÕæ£¬ÔòÕû¸ö±í´ïÊ½ÎªÕæ¡£²¢ÇÒÊä³öThis AND that ¡£Èç¹û $bar Ϊ¼Ù£¬½«Ã»ÓÐÊä³öÒòΪÕû¸ö±í´ïʽΪ¼Ù¡£
Âß¼OR µÄ¹¤×÷·½Ê½Ïàͬ£¬Î¨Ò»µÄÀýÍâÊÇÆäÖÐÒ»¸ö±í´ïʽҪ±»ÇóÖµ£¬ÒÔ±ã¾ö¶¨Õû¸ö±í´ïʽÊÇ·ñÎªÕæ¡£Çë¿´ÏÂÃæµÄÀý×Ó£º
|
## logical OR
#if( $foo || $bar )
<strong>This OR That</strong>
#end |
Èç¹û $foo ÎªÕæ£¬Velocity Ä£°åÒýÇæ¾Í²»ÐèҪȥ²ì¿´$bar µÄÖµ£¬²»¹Ü $bar ÊÇ·ñÎªÕæ£¬Õæ¸ö±í´ïʽ¶¼ÎªÕ棬Òò´ËÊä³öThis OR That ¡£Èç¹û $foo Ϊ¼Ù£¬$bar ¾Í±ØÐë¼ì²éÆäÖµÁË¡£ÔÚÕâÖÖÇé¿öÏ£¬Èç¹û$bar Ò²ÊÇΪ¼Ù£¬±í´ïʽ½«Îª¼Ù£¬Ã»ÓÐÈκÎÊä³ö¡£µ±È»£¬Èç¹û$bar ÎªÕæ£¬ÔòÕæ¸ö±í´ïÊ½ÎªÕæ£¬Êä³öThis OR That¡£
¶ÔÓÚÂß¼NOT ²Ù×÷·û£¬Ö»ÓÐÒ»¸ö²Ù×÷Êý£º
|
##logical NOT
#if( !$foo )
<strong>NOT that</strong>
#end
|
ÕâÀÈç¹û$foo ÎªÕæ£¬!$foo ÇóֵΪ¼Ù£¬Ã»ÓÐÊä³ö¡£Èç¹û$foo Ϊ¼Ù£¬!$foo ÇóÖµÎªÕæ£¬Êä³öNOT that ¡£Çëµ±ÐÄ£¬²»ÒªºÍ°²¾²ÒýÓÃquiet reference $!foo »ìÏýËüÃÇÊÇÍêÈ«²»Í¬µÄ¡£


