﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-『Ben狐狸』-文章分类-Velocity</title><link>http://www.blogjava.net/benfox/category/33637.html</link><description>自信、奉献、快乐</description><language>zh-cn</language><lastBuildDate>Sat, 09 Aug 2008 01:16:10 GMT</lastBuildDate><pubDate>Sat, 09 Aug 2008 01:16:10 GMT</pubDate><ttl>60</ttl><item><title>VTL参考指南</title><link>http://www.blogjava.net/benfox/articles/220963.html</link><dc:creator>Ben狐狸</dc:creator><author>Ben狐狸</author><pubDate>Fri, 08 Aug 2008 11:12:00 GMT</pubDate><guid>http://www.blogjava.net/benfox/articles/220963.html</guid><wfw:comment>http://www.blogjava.net/benfox/comments/220963.html</wfw:comment><comments>http://www.blogjava.net/benfox/articles/220963.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/benfox/comments/commentRss/220963.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/benfox/services/trackbacks/220963.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体">1</span><span style="font-family: 宋体">关于本指南</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">本指南是VTL(Velocity Template Language)的参考文档。至于更多信息，请查阅Velocity用户手册(Velocity User Guide)</span></p>
<p><span style="font-family: 宋体">2</span><span style="font-family: 宋体">语法参考</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">2.1</span><span style="font-family: 宋体">变量</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">符号：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">$[!][{][a..z,A..Z][a..z,A..Z,0-9,-,_][]]</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">大家对上面的表示不知道清楚不清楚，我这儿给大家描述一边，以后类似的表述都是这样。&#8220;[]&#8221;表示可选项，意为可有可无。通过上面的表述可以看出变量一个必写项和若干个可选项组成。其中$是必写项，其余的都是可选项。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">例如：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;一般符号：$mud-slinger_9</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;静态符号：$!mud_slinger_9</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;正式符号：${mud_slinger_9}</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">2.2</span><span style="font-family: 宋体">属性</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">符号：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">$[{][a..z,A..Z][a..z,A..z,0..9,-,_]*.[a..z,A..Z][a..z,A..Z,0..9,-,_]*[}]</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">例如：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;一般符号：$customer.Address</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;正式符号：${purchase.Total}</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">2.3</span><span style="font-family: 宋体">方法</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">符号：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">$[{][a..z,A..Z][a..z,A..Z,0..9,-,_]*.[a..z,a..Z][a..z,A..Z,0..9,-,_]*([</span><span style="font-family: 宋体">可选参数列表&#8230;])[}]</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">例如：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;一般符号：$customer.getAddress()</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;正式符号：${puchase.getTotal()}</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;带有参数列表的一般符号：$page.setTile(&#8220;My Home Paget&#8221;)</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">VTL</span><span style="font-family: 宋体">属性值表示的简短使用代替了VTL方法表示中的get和set方法。例如,$object.getMethod()或者$object.setMethod()使用VTL属性值表示可将其简化为$object.Method。在使用时这样表示方法通常更加便捷的。属性值表示和方法表示最主要的区别在于是否有传递的参数，如果有参数则需要是用方法表示，如果没有参数就可以直接使用属性值表示。</span></p>
<p><span style="font-family: 宋体">3</span><span style="font-family: 宋体">指令</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">3.1#set-</span><span style="font-family: 宋体">确立变量、属性、方法的值</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">格式：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">#[{] set[}]($ref=[&#8220;,&#8217;]arg[&#8221;,&#8217;])</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">用法：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;$ref-等号左边必须是一个变量或者属性值</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;$arg-等号右边的arg可以用双引号或者单引号组成的字符串或者字符。如果等号右边是NULL，那等号左边将无法被赋值。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">例如：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;变量：#set($monkey=$bill)</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;字符串：#set($monkey.Friend=&#8217;monica&#8217;)</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;属性值：#set($monkey.Blame=$whitehouse.Leak)</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;方法：#set($monkey.Plan=$spindoctor.weave($web))</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;一般：#set($monkey.Number=123)</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;列表：#set($monkey.Numbers=[1..3])</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;数组：#set($monkey.Say=[&#8220;Not&#8221;,$my,&#8221;fault&#8221;])</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">等式右边也可以是一个简单的算术表达式，例如：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;加法：#set($value=$foo+1)</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;减法：#set($value=$bar-1)</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;乘法：#set($value=$foo*$bar)</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;除法：#set($value=$foo/$bar)</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;求余：#set($value=$foo%$bar)</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">3.2#if/#elseif/#else-</span><span style="font-family: 宋体">条件判断</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">格式：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">#[{]if[}]([</span><span style="font-family: 宋体">判断条件])[输出内容][#[{ ]elseif[ }]([判断条件])[输出内容]]*[# [{ ]else[ }]([判断条件])[输出内容]]# [{ ]end[ }]</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">例如：</span></p>
<table style="margin-left: -1.25pt; width: 100%" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td style="border-right: white 1pt solid; padding-right: 1.25pt; border-top: white 1pt solid; padding-left: 1.25pt; background: #039acc; padding-bottom: 1.25pt; border-left: white 1pt solid; padding-top: 1.25pt; border-bottom: white 1pt solid" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><strong><span style="color: black; font-family: 宋体">Operator Name</span></strong></p>
            </td>
            <td style="border-right: white 1pt solid; padding-right: 1.25pt; border-top: white 1pt solid; padding-left: 1.25pt; background: #039acc; padding-bottom: 1.25pt; border-left: white 1pt solid; padding-top: 1.25pt; border-bottom: white 1pt solid" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><strong><span style="color: black; font-family: 宋体">Symbol</span></strong></p>
            </td>
            <td style="border-right: white 1pt solid; padding-right: 1.25pt; border-top: white 1pt solid; padding-left: 1.25pt; background: #039acc; padding-bottom: 1.25pt; border-left: white 1pt solid; padding-top: 1.25pt; border-bottom: white 1pt solid" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><strong><span style="color: black; font-family: 宋体">Alternative Symbol</span></strong></p>
            </td>
            <td style="border-right: white 1pt solid; padding-right: 1.25pt; border-top: white 1pt solid; padding-left: 1.25pt; background: #039acc; padding-bottom: 1.25pt; border-left: white 1pt solid; padding-top: 1.25pt; border-bottom: white 1pt solid" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><strong><span style="color: black; font-family: 宋体">Example</span></strong></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">Equals Number</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">==</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">eq</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">#if( $foo == 42 )</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #a0ddf0; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">Equals String</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #a0ddf0; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">==</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #a0ddf0; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">eq</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #a0ddf0; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">#if( $foo == "bar" )</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">Object Equivalence</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">==</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">eq</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">#if( $foo == $bar )</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #a0ddf0; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">Not Equals</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #a0ddf0; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">!=</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #a0ddf0; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">ne</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #a0ddf0; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">#if( $foo != $bar )</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">Greater Than</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">&gt;&nbsp;</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">gt</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">#if( $foo &gt; 42 )</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #a0ddf0; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">Less Than</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #a0ddf0; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">&lt;&nbsp;</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #a0ddf0; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">lt</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #a0ddf0; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">#if( $foo &lt; 42 )</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">Greater Than or Equal To</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">&gt;=</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">ge</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">#if( $foo &gt;= 42 )</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #a0ddf0; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">Less Than or Equal To</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #a0ddf0; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">&lt;=</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #a0ddf0; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">le</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #a0ddf0; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">#if( $foo &lt;= 42 )</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">Boolean NOT</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">!</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">not</span></p>
            </td>
            <td style="padding-right: 2.5pt; padding-left: 2.5pt; background: #88c5d8; padding-bottom: 1.25pt; padding-top: 1.25pt" valign="top">
            <p style="line-height: 15.6pt; text-align: left" align="left"><span style="color: black; font-family: 宋体">#if( !$foo )</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 21pt"><span style="font-family: 宋体">注意：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">1</span><span style="font-family: 宋体">．<span style="color: black">&#8220;== &#8220;操作可以用来比较数字，字符串，或同一个类的不同对象或不同类型的对象. 当是不同类的对象时，会调用它们的toString()命令结果来做比较看是否相等.</span></span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="color: black; font-family: 宋体">2</span><span style="color: black; font-family: 宋体">．你也可以用括弧来限定指令。当书写时紧跟一个#else，这是就需要将该else指令限定。</span></p>
<p style="background: #f8fff8; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><span style="color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">#if( $foo == $bar)it's true!#{else}it's not!#end&lt;/li&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">3.3#foreach-</span><span style="font-family: 宋体">对象循环</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">格式：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">#[{] foreach[}](<em>$ref </em>in <em>arg</em>)statement#[{] end[}]</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">用法：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;$ref-用于循环的变量</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;arg-可能是一个列表引用(i.e.object.array,collection,or map),或者一个array list,或者其他列表。</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;statement-<em><span style="color: black">当velocity发现下一个有效对像在列表中,输出可以是一个合法的VTL.</span></em></span></p>
<p style="text-indent: 21pt"><em><span style="color: black; font-family: 宋体">例如下面省略statement的#foreach():</span></em></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;引用：#foreach($item in $items)</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;数组：#foreach($item in [&#8220;Not&#8221;,$my,&#8221;fault&#8221;])</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;列表：#foreach($item in[1...3])</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">Velocity</span><span style="font-family: 宋体">提供一个简单的方式实现循环计数器，这样你可以根据一下来做：</span></p>
<p style="background: #f8fff8; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-family: 宋体">&lt;table&gt;</span></p>
<p style="background: #f8fff8; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-family: 宋体">#foreach( $customer in $customerList )</span></p>
<p style="background: #f8fff8; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; &lt;tr&gt;&lt;td&gt;$velocityCount&lt;/td&gt;&lt;td&gt;$customer.Name&lt;/td&gt;&lt;/tr&gt;</span></p>
<p style="background: #f8fff8; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-family: 宋体">#end</span></p>
<p style="background: #f8fff8; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-family: 宋体">&lt;/table&gt;</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">循环计数器引用中有一个默认的名字-$velocityCount，它是在velocity.properties中定义。计数器默认设置从1开始计数，同样你也可以在velocity.properties中进行设定成0或者1。计数器的部分属性参数可以在velocity.properties文件里找到：</span></p>
<p style="background: #f8fff8; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-family: 宋体"># Default name of the loop counter</span></p>
<p style="background: #f8fff8; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-family: 宋体"># variable reference.</span></p>
<p style="background: #f8fff8; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-family: 宋体">directive.foreach.counter.name = velocityCount</span></p>
<p style="background: #f8fff8; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-family: 宋体"># Default starting value of the loop</span></p>
<p style="background: #f8fff8; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-family: 宋体"># counter variable reference.</span></p>
<p style="background: #f8fff8; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-family: 宋体">directive.foreach.counter.initial.value = 1</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">在Velocity1.5中加入了对计数器最大值的限制，默认值是-1，表示没有限制。</span></p>
<p style="background: #f8fff8; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-family: 宋体"># The maximum allowed number of loops.</span></p>
<p style="background: #f8fff8; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-family: 宋体">directive.foreach.maxloops = -1</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">3.4#include-</span><span style="font-family: 宋体">加载不用被Velocity解析的本地文件</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">格式：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">#[{]include[}](arg[arg2&#8230;argn])</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">&#8226;arg-在TEMPLATE_ROOT下引用一个有效的文件</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">例如：</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">&#8226;字符串：#include( "disclaimer.txt" "opinion.txt" )</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">&#8226;变量：#include( $foo $bar )</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; 3.5#parse-</span><span style="font-family: 宋体">加载一个需要被Velocity解析的本地模板</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">格式：</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #[{]parse[}](arg)</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">&#8226;arg-在TEMPLATE_ROOT下引用一个模板</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">例如：</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">&#8226;字符串：#parse( "lecorbusier.vm" )</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">&#8226;变量：#parse( $foo )</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><span style="color: black; font-family: 宋体">通过设置配置中的解析层次深度的最大值velocity.properties中项 <em>parse_directive.maxdepth</em> in可以防止死循环. (The default parse depth is 10.)</span></p>
<p><span style="color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; 3.6#stop-</span><span style="color: black; font-family: 宋体">停止模板引擎</span></p>
<p><span style="color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><span style="color: black; font-family: 宋体">格式：</span></p>
<p><span style="color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #</span><span style="font-family: 宋体">[{]stop[}]</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">用法：</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">它将停止执行流动中的模板。这对调试模板来说很不错。</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; 3.7#evaluate-</span><span style="font-family: 宋体">动态的估计一个字符串或者引用</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">格式：</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #[{] evaluate[}](arg)</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">&#8226;arg-被动态估计的字符串或者</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">例如：</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c</span><span style="font-family: 宋体">字符串：#evaluate( 'string with VTL #if(true)will be displayed#end' )</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">&#8226;变量：#include( $foo )</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; 3.8#macro-</span><strong><span style="font-weight: normal; font-family: 宋体">让用户可以定义宏操作(Velocimacro (VM):一组实现特定功能的VTL</span></strong></p>
<p><strong><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; </span></strong><span style="font-family: 宋体">格式：</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #[{]macro[}](vmname $arg1[$arg2 $arg3 &#8230; $argn])[VM VTL code&#8230;]# [{]end[}]</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">&#8226;</span><span style="color: black; font-family: 宋体">vmname </span><span style="color: black; font-family: 宋体">&#8211; 宏名字 VM (#vmname) </span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">&#8226;<em><span style="color: black">$arg1 $arg2 [ ... ] </span><span style="color: black">&#8211; 要传给宏的参数VM</span></em></span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">&#8226;<em><span style="color: black">[ VM VTL code... ] </span><span style="color: black">&#8211;宏代码，有效的VTL</span></em></span></p>
<p><em><span style="color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; </span></em><em><span style="color: black; font-family: 宋体">一旦定义，VM就像是模板中任何别的VTL指令。</span></em></p>
<p style="background: #f8fff8; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><em><span style="color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></em><span style="font-size: 10pt; font-family: 'Courier New'">#vmname( $arg1 $arg2 )</span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; VMs</span><span style="font-family: 宋体">可以被定义在两个地方：</span></p>
<p style="margin-left: 39pt; text-indent: -18pt"><span style="font-family: 宋体">1．</span><span style="font-family: 宋体">Template library:</span><span style="font-family: 宋体">可以配置用户定义的库，以便全站使用。</span></p>
<p style="margin-left: 39pt; text-indent: -18pt"><span style="font-family: 宋体">2．</span><span style="font-family: 宋体">Inline:</span><span style="font-family: 宋体">放入到一般的模板文件中，仅当配置参数velocimacro.permissions.allowInline=true时生效。</span></p>
<p><span style="font-family: 宋体">4</span><span style="font-family: 宋体">注解</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">4.1</span><span style="font-family: 宋体">单行注解</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">例如: </span></p>
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ##This is a comment.</span></p>
<p><span style="font-family: 宋体">4.2</span><span style="font-family: 宋体">多行注解</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">例如：</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">#*</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">This is a multiline comment.</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">*#</span></p>
 <img src ="http://www.blogjava.net/benfox/aggbug/220963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/benfox/" target="_blank">Ben狐狸</a> 2008-08-08 19:12 <a href="http://www.blogjava.net/benfox/articles/220963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>