#foreach ( $customer in $customerList )
$velocityCount±äÁ¿µÄÃû×ÖÊÇVelocityĬÈϵÄÃû×Ö£¬ÄãÒ²¿ÉÒÔͨ¹ýÐÞ¸Ä
velocity.propertiesÎļþÀ´¸Ä±äËü¡£Ä¬ÈÏÇé¿öÏ£¬¼ÆÊý´Ó¡°1¡±¿ªÊ¼£¬µ«ÊÇÄã¿ÉÒÔÔÚvelocity.propertiesÉèÖÃËüÊÇ´Ó¡°1¡±»¹ÊÇ´Ó¡°0¡±¿ªÊ¼¡£ÏÂÃæ¾ÍÊÇÎļþÖеÄÅäÖãº
# Default name of loop counter # variable reference
directive.foreach.counter.name = velocityCount
# Default starting value of the loop # counter variable reference
directive.foreach.counter.initial.value = 1
include
#include script elementÔÊÐíÄ£°åÉè¼ÆÕßÒýÈë±¾µØÎļþ¡£±»ÒýÈëÎļþµÄÄÚÈݽ«²»»áͨ¹ýÄ£°åÒýÇæ±»render¡£ÎªÁ˰²È«µÄÔÒò£¬±»ÒýÈëµÄ±¾µØÎļþÖ»ÄÜÔÚTEMPLATE_ROOTĿ¼Ï¡£
#inclued ( ¡°one.txt¡± )
Èç¹ûÄúÐèÒªÒýÈë¶à¸öÎļþ£¬¿ÉÒÔÓöººÅ·Ö¸ô¾ÍÐУº
#include ( ¡°one.gif¡±, ¡°two.txt¡±, ¡°three.htm¡± ) ÔÚÀ¨ºÅÄÚ¿ÉÒÔÊÇÎļþÃû£¬µ«ÊǸü¶àµÄʱºòÊÇʹÓñäÁ¿µÄ£º #inclue ( ¡°greetings.txt¡±, $seasonalstock )
parse
#parse script elementÔÊÐíÄ£°åÉè¼ÆÕßÒ»¸ö°üº¬VTLµÄ±¾µØÎļþ¡£Velocity½«½âÎöÆäÖеÄVTL²¢renderÄ£°å¡£ #parse( ¡°me.vm¡± )
¾ÍÏñ#include£¬#parse½ÓÊÜÒ»¸ö±äÁ¿¶ø²»ÊÇÒ»¸öÄ£°å¡£ÈκÎÓÉ#parseÖ¸ÏòµÄÄ£°å¶¼±ØÐë°üº¬ÔÚTEMPLATE_ROOTĿ¼Ï¡£Óë#include²»Í¬µÄÊÇ£¬#parseÖ»ÄÜÖ¸¶¨µ¥¸ö¶ÔÏó¡£
Äã¿ÉÒÔͨ¹ýÐÞ¸Ävelocity.propertiesÎļþµÄparse_direcive.maxdepthµÄÖµÀ´¿ØÖÆÒ»¸ötemplate¿ÉÒÔ°üº¬µÄ×î¶à#parseµÄ¸öÊý¨D¨DĬÈÏÖµÊÇ10¡£#parseÊÇ¿ÉÒԵݹéµ÷Óõģ¬ÀýÈ磺Èç¹ûdofoo.vm°üº¬ÈçÏÂÐУº Count down.
#set ( $count = 8 )
#parse ( ¡°parsefoo.vm¡± ) All done with dofoo.vm!
ÄÇôÔÚparsefoo.vmÄ£°åÖУ¬Äã¿ÉÒÔ°üº¬ÈçÏÂVTL£º $count
#set ( $count = $count ¨C 1 ) #if ( $count > 0 )
#parse( ¡°parsefoo.vm¡± ) #else
All done with parsefoo.vm! #end
µÄÏÔʾ½á¹ûΪ£º Count down. 8 7 6 5 4 3 2 1 0
All done with parsefoo.vm! All done with dofoo.vm!
Stop
#stop script elementÔÊÐíÄ£°åÉè¼ÆÕßÍ£Ö¹Ö´ÐÐÄ£°åÒýÇæ²¢·µ»Ø¡£°ÑËüÓ¦ÓÃÓÚdebugÊǺÜÓаïÖúµÄ¡£ #stop
Velocimacros #macro script elementÔÊÐíÄ£°åÉè¼ÆÕß¶¨ÒåÒ»¶Î¿ÉÖØÓõÄVTL template¡£ÀýÈ磺 #macro ( d )
ÔÚÉÏÃæµÄÀý×ÓÖÐVelocimacro±»¶¨ÒåΪd£¬È»ºóÄã¾Í¿ÉÒÔÔÚÈκÎVTL directiveÖÐÒÔÈçÏ·½Ê½µ÷ÓÃËü£º #d()
µ±ÄãµÄtemplate±»µ÷ÓÃʱ£¬Velocity½«ÓÃ
µ÷ÓÃ#tablerows Velocimacro£º #set ( $greatlakes = [ ¡°Superior¡±, ¡°Michigan¡±, ¡°Huron¡±, ¡°Erie¡±, ¡°Ontario¡± ] )
#set ( $color = ¡°blue¡± )
¾¹ýÒÔÉϵĵ÷Óý«²úÉúÈçϵÄÏÔʾ½á¹û£º
Superior |
Michigan |
Huron |
Erie |
Ontario |
Velocimacros¿ÉÒÔÔÚVelocityÄ£°åÄÚʵÏÖÐÐÄÚ¶¨Ò壨inline£©£¬Ò²¾ÍÒâζ×Åͬһ¸öweb siteÄ򵀮äËûVelocityÄ£°å²»¿ÉÒÔ»ñµÃVelocimacrosµÄ¶¨Òå¡£¶¨ÒåÒ»¸ö¿ÉÒÔ±»ËùÓÐÄ£°å¹²ÏíµÄVelocimacroÏÔÈ»ÊÇÓкܶàºÃ´¦µÄ£ºËü¼õÉÙÁËÔÚÒ»´ó¶ÑÄ£°åÖÐÖØ¸´¶¨ÒåµÄÊýÁ¿¡¢½ÚÊ¡Á˹¤×÷ʱ¼ä¡¢¼õÉÙÁ˳ö´íµÄ¼¸ÂÊ¡¢±£Ö¤Á˵¥µãÐ޸ġ£
ÉÏÃæ¶¨ÒåµÄ#tablerows( $color $list )Velocimacro±»¶¨ÒåÔÚÒ»¸ö
VelocimacrosÄ£°å¿â(ÔÚvelocity.propertiesÖж¨Òå)ÀËùÒÔÕâ¸ömacro¿ÉÒÔÔÚÈκι淶µÄÄ£°åÖб»µ÷Óá£Ëü¿ÉÒÔ±»¶à´ÎÓ¦Óò¢ÇÒ¿ÉÒÔÓ¦ÓÃÓÚ²»Í¬µÄÄ¿µÄ¡£ÀýÈçÏÂÃæµÄµ÷Óãº
#set ( $parts = [ ¡°volva¡±, ¡°stipe¡±, ¡°annulus¡±, ¡°gills¡±, ¡°pileus¡± ] )
#set ( $cellbgcol = ¡°#CC00FF¡± )
ÉÏÃæVTL½«²úÉúÈçϵÄÊä³ö£º
volva |
stipe |
annulus |
gills |
pileus |
Velocimacro arguments
Velocimacro¿ÉÒÔʹÓÃÒÔÏÂÈκÎÔªËØ×÷Ϊ²ÎÊý£º l Reference£ºÈκÎÒÔ$¿ªÍ·µÄreference l String literal£º l Number literal£º
l IntegerRange£º[1?.3]»òÕß[$foo?.$bar] l ¶ÔÏóÊý×飺[¡°a¡±,¡±b¡±,¡±c¡±] l booleanÖµ£ºtrue¡¢false
µ±½«Ò»¸öreference×÷Ϊ²ÎÊý´«µÝ¸øVelocimacroʱ£¬Çë×¢Òâreference×÷Ϊ²ÎÊýʱÊÇÒÔÃû×ÖµÄÐÎʽ´«µÝµÄ¡£Õâ¾ÍÒâζ×ŲÎÊýµÄÖµÔÚÿ´ÎVelocimacroÄÚÖ´ÐÐʱ
²Å»á±»²úÉú¡£Õâ¸öÌØÐÔʹµÃÄã¿ÉÒÔ½«Ò»¸ö·½·¨µ÷ÓÃ×÷Ϊ²ÎÊý´«µÝ¸øVelocimacro£¬¶øÃ¿´ÎVelocimacroÖ´ÐÐʱ¶¼ÊÇͨ¹ýÕâ¸ö·½·¨µ÷ÓòúÉú²»Í¬µÄÖµÀ´Ö´Ðеġ£ÀýÈ磺 #macro ( callme $a ) $a $a $a #end
#callme( $foo.bar() )
Ö´ÐеĽá¹ûÊÇ£ºreference $fooµÄbar£¨£©·½·¨±»Ö´ÐÐÁËÈý´Î¡£ Èç¹ûÄã²»ÐèÒªÕâÑùµÄÌØÐÔ¿ÉÒÔͨ¹ýÒÔÏ·½·¨£º #set ( $myval = $foo.bar() ) #callme ( $myval )
Velocimacro properties
Velocity.propertiesÎļþÖеÄij¼¸ÐÐÄܹ»Ê¹VelocimacrosµÄʵÏÖ¸ü¼ÓÁé»î¡£×¢Òâ¸ü¶àµÄÄÚÈÝ¿ÉÒÔ¿´Developer Guide¡£
Velocity.propertiesÎļþÖеÄvelocimacro.libraary£ºÒ»¸öÒÔ¶ººÅ·Ö¸ôµÄÄ£°å¿âÁÐ±í¡£Ä¬ÈÏÇé¿öÏ£¬velocity²éÕÒΨһµÄÒ»¸ö¿â£ºVM_global_library.vm¡£Äã¿ÉÒÔͨ¹ýÅäÖÃÕâ¸öÊôÐÔÀ´Ö¸¶¨×Ô¼ºµÄÄ£°å¿â¡£
Velocity.propertiesÎļþÖеÄvelocimacro.permissions.allow.inlineÊôÐÔ£ºÓÐÁ½¸ö¿ÉÑ¡µÄÖµtrue»òÕßfalse£¬Í¨¹ýËü¿ÉÒÔÈ·¶¨VelocimacrosÊÇ·ñ¿ÉÒÔ±»¶¨ÒåÔÚregular templateÄÚ¡£Ä¬ÈÏÖµÊÇture¨D¨DÔÊÐíÉè¼ÆÕßÔÚËûÃÇ×Ô¼ºµÄÄ£°åÖж¨ÒåVelocimacros¡£
Velocity.propertiesÎļþÖеÄ
velocimacro.permissions.allow.inline.replace.globalÊôÐÔÓÐÁ½¸ö¿ÉѡֵtrueºÍfalse£¬Õâ¸öÊôÐÔÔÊÐíʹÓÃÕßÈ·¶¨inlineµÄVelocimacro¶¨ÒåÊÇ·ñ¿ÉÒÔÌæ´úÈ«¾ÖVelocimacro¶¨Ò壨±ÈÈçÔÚvelocimacro.libraryÊôÐÔÖÐÖ¸¶¨µÄÎļþÄÚ¶¨ÒåµÄVelocimacro£©¡£Ä¬ÈÏÇé¿öÏ£¬´ËֵΪfalse¡£ÕâÑù¾Í×èÖ¹±¾µØVelocimacro¶¨Ò帲¸ÇÈ«¾Ö¶¨Òå¡£
Velocity.propertiesÎļþÖеÄ
velocimacro.permissions.allow.inline.local.scaleÊôÐÔÒ²ÊÇÓÐtrueºÍfalseÁ½¸ö¿Éѡֵ£¬Ä¬ÈÏÊÇfalse¡£ËüµÄ×÷ÓÃÊÇÓÃÓÚÈ·¶¨Äãinline¶¨ÒåµÄ
VelocimacrosÊÇ·ñ½ö½öÔÚ±»¶¨ÒåµÄtemplateÄڿɼû¡£»»¾ä»°Ëµ£¬Èç¹ûÕâ¸öÊôÐÔÉèÖÃΪtrue£¬Ò»¸öinline¶¨ÒåµÄVelocimacrosÖ»ÄÜÔÚ¶¨ÒåËüµÄtemplateÄÚʹÓá£Äã¿ÉÒÔʹÓôËÉèÖÃʵÏÖÒ»¸öÆæÃîµÄVMÇÃÃÅ£ºa template can define a private implementation of the second VM that will be called by the first VM when invoked by that template. All other templates are unaffected¡£
Velocity.propertiesÎļþÖеÄvelocimacro.context.localscopeÊôÐÔÓÐtrueºÍfalseÁ½¸ö¿Éѡֵ£¬Ä¬ÈÏֵΪfalse¡£µ±ÉèÖÃΪtrueʱ£¬ÈκÎÔÚVelocimacroÄÚͨ¹ý#set()¶ÔcontextµÄÐ޸ı»ÈÏΪÊÇÕë¶Ô´ËvelocimacroµÄ±¾µØÉèÖ㬶ø²»»áÓÀ¾ÃµÄÓ°ÏìÄÚÈÝ¡£
Velocity.propertiesÎļþÖеÄvelocimacro.library.autoreloadÊôÐÔ¿ØÖÆVelocimacro¿âµÄ×Ô¶¯¼ÓÔØ¡£Ä¬ÈÏÊÇfalse¡£µ±ÉèÖÃΪtureʱ£¬¶ÔÓÚÒ»¸ö
VelocimacroµÄµ÷Óý«×Ô¶¯¼ì²éÔʼ¿âÊÇ·ñ·¢ÉúÁ˱仯£¬Èç¹û±ä»¯½«ÖØÐ¼ÓÔØËü¡£Õâ¸öÊôÐÔʹµÃÄã¿ÉÒÔ²»ÓÃÖØÐÂÆô¶¯servletÈÝÆ÷¶ø´ïµ½ÖØÐ¼ÓÔØµÄЧ¹û£¬¾ÍÏñÄãʹÓÃregularÄ£°åÒ»Ñù¡£Õâ¸öÊôÐÔ¿ÉÒÔʹÓõÄǰÌá¾ÍÊÇresource loader»º´æÊÇ
Ïà¹ØÍÆ¼ö£º