·¢²©ÎÄ
Ãæ³¯´óº££¬´ºÅ¯»¨¿ª

http://blog.chinaunix.net/space.php?uid=14607221

´Ó˼¿¼ÖÐÈÏʶ×ÔÎÒ,´ÓѧϰÖÐѰÇóÕæÀí,´Ó¶ÀÁ¢ÖÐÌåÑé×ÔÖ÷, ´Ó¼Æ»®ÖаÑÎÕʱ¼ä,´Ó±í´ïÖжÍÁ¶¿Ú²Å,´Ó½»ÓÑÖÐÆ·Î¶³ÉÊì, ´Óʵ¼ùÖÐÓ®µÃ¼ÛÖµ,´ÓÐËȤÖоðÈ¡¿ìÀÖ,´Ó×·ÇóÖлñµÃÁ¦Á¿   
¸öÈË×ÊÁÏ
  • ²©¿Í·ÃÎÊ£º137155
  • ²©ÎÄÊýÁ¿£º84
  • ²©¿Í»ý·Ö£º2010
  • ²©¿ÍµÈ¼¶£º´óξ
  • ×¢²áʱ¼ä£º2007-05-31 22:53:42
¶©ÔÄÎҵIJ©¿Í
  • ¶©ÔÄ
  • ¶©Ôĵ½Ïʹû
  • ¶©Ôĵ½×¥Ïº
  • ¶©Ôĵ½Google
×ÖÌå´óС£º´ó ÖРС²©ÎÄ
velocity ÊÖ²á (¶þ) (2007-09-22 10:44)
·ÖÀࣺ JAVA

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 »ìÏýËüÃÇÊÇÍêÈ«²»Í¬µÄ¡£



ǰһƪ£ºvelocity ÊÖ²á (-)
Ç×£¬Äú»¹Ã»ÓеǼ,Çë[µÇ¼]»ò[×¢²á]ºóÔÙ½øÐÐÆÀÂÛ