<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.    
-->

<!-- start the processing -->
    <!-- ====================================================================== -->
    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
    <!-- Main Page Section -->
    <!-- ====================================================================== -->
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>

                                                    <meta name="author" value="Velocity Documentation Team">
            <meta name="email" value="dev@velocity.apache.org">
            
           
                                    
                        
            <title>Velocity - VTL Reference</title>

									<link rel="stylesheet" href="./site.css" type="text/css">
        </head>

        <body>

			
			<div id="container">
				<div id="body">
																	<a name="AboutthisGuide"></a>
	<h1>About this Guide</h1>

	<div class="subsection">
														<p>
    This guide is the reference for the Velocity Template Language
    (VTL). For more information, please also refer to the <a href="user-guide.html">Velocity User Guide</a>.
</p>
								</div>
												<a name="References"></a>
	<h1>References</h1>

	<div class="subsection">
										<a name="Variables"></a>
	<h2>Variables</h2>
	<div class="subsection">
										<p>
    Notation:
    </p>
												<p>
    <strong>$</strong> [ <strong>!</strong> ][ <strong>{</strong> ][
    <strong>a..z</strong>, <strong>A..Z</strong> ][ <strong>a..z</strong>,
    <strong>A..Z</strong>, <strong>0..9</strong>, <strong>-</strong>,
    <strong>_</strong> ][ <strong>}</strong> ]
    </p>
												<p>
    Examples:
    </p>
												<ul>
			<li>
						Shorthand notation: 
													<variable>$mud-Slinger_9</variable>
					</li>
			<li>
						Silent Shorthand notation: 
													<variable>$!mud-Slinger_9</variable>
					</li>
			<li>
						Formal notation: 
													<variable>${mud-Slinger_9}</variable>
					</li>
			<li>
						Silent Formal notation: 
													<variable>$!{mud-Slinger_9}</variable>
					</li>
	</ul>
					</div>
													<a name="Properties"></a>
	<h2>Properties</h2>
	<div class="subsection">
										<p>
    Notation:
    </p>
												<p>
      <strong>$</strong> [ <strong>{</strong> ][ <strong>a..z</strong>,
      <strong>A..Z</strong> ][ <strong>a..z</strong>, <strong>A..Z</strong>,
      <strong>0..9</strong>, <strong>-</strong>, <strong>_</strong> ]*
      <strong>.</strong>[<strong>a..z</strong>, <strong>A..Z</strong> ][
      <strong>a..z</strong>, <strong>A-Z</strong>, <strong>0..9</strong>,
      <strong>-</strong>, <strong>_</strong> ]* [ <strong>}</strong> ]
    </p>
												<p>
    Examples:
    </p>
												<ul>
			<li>
						Regular Notation: $customer.Address
			</li>
			<li>
						Formal Notation: ${purchase.Total}
			</li>
	</ul>
					</div>
													<a name="Methods"></a>
	<h2>Methods</h2>
	<div class="subsection">
										<p>
    Notation:
    </p>
												<p>
      <strong>$</strong> [ <strong>{</strong> ][ <strong>a..z</strong>,
      <strong>A..Z</strong> ][ <strong>a..z</strong>, <strong>A..Z</strong>,
      <strong>0..9</strong>, <strong>-</strong>, <strong>_</strong> ]*
      <strong>.</strong>[ <strong>a..z</strong>, <strong>A..Z</strong> ][
      <strong>a..z</strong>, <strong>A..Z</strong>, <strong>0..9</strong>,
      <strong>-</strong>, <strong>_</strong> ]*<strong>(</strong> [
      <i>optional parameter list...</i> ] <strong>)</strong> [
      <strong> } </strong>]
    </p>
												<p>
    Examples:
    </p>
												<ul>
			<li>
						Regular Notation: $customer.getAddress()
			</li>
			<li>
						Formal Notation: ${purchase.getTotal()}
			</li>
			<li>
						Regular Notation with Parameter List: $page.setTitle( "My Home
      Page" )
			</li>
	</ul>
					</div>
																	<p>
  VTL Properties can be used as a shorthand notation for VTL Methods
  that take <em>get</em> and <em>set</em>. Either
  <em>$object.getMethod()</em> or <em>$object.setMethod()</em> can be
  abbreviated as <em>$object.Method</em>. It is generally preferable to
  use a Property when available. The main difference between Properties
  and Methods is that you can specify a parameter list to a Method.
  </p>
								</div>
												<a name="Directives"></a>
	<h1>Directives</h1>

	<div class="subsection">
										<a name="set-Establishesthevalueofareference"></a>
	<h2>#set - Establishes the value of a reference</h2>
	<div class="subsection">
										<p>
    Format:
    </p>
												<p>
    <strong>#</strong> [ <strong>{</strong> ] <strong>set</strong> [ <strong>}</strong> ] <strong> ( $</strong>ref <strong>=</strong> [ <strong>"</strong>,
    <strong>'</strong> ]arg[ <strong>"</strong>, <strong>'</strong> ] )
    </p>
												<p>
    Usage:
    </p>
												<ul>
			<li>
											<em>$ref</em>
										 - The LHS of the assignment must be a variable
    reference or a property reference.
			</li>
			<li>
											<em>arg</em>
										 - The RHS of the assignment, 
													<em>arg</em>
										 is parsed
    if enclosed in double quotes, and not parsed if enclosed in single
    quotes.  If the RHS evaluates to 
													<em>null</em>
										, it is 
													<b>not</b>
										
    assigned to the LHS.
			</li>
	</ul>
												<p>
    Examples:
    </p>
												<ul>
			<li>
						Variable reference: #set( $monkey = $bill )
			</li>
			<li>
						String literal: #set( $monkey.Friend = 'monica' )
			</li>
			<li>
						Property reference: #set( $monkey.Blame = $whitehouse.Leak
      )
			</li>
			<li>
						Method reference: #set( $monkey.Plan = $spindoctor.weave($web)
      )
			</li>
			<li>
						Number literal: #set( $monkey.Number = 123 )
			</li>
			<li>
						Range operator: #set( $monkey.Numbers = [1..3] )
			</li>
			<li>
						Object list: #set( $monkey.Say = ["Not", $my, "fault"] )
			</li>
			<li>
						Object map: #set( $monkey.Map = {"banana" : "good", "roast beef" : "bad"})
			</li>
	</ul>
												<p>
    The RHS can also be a simple arithmetic expression, such as:
    </p>
												<ul>
			<li>
						Addition: #set( $value = $foo + 1 )
			</li>
			<li>
						Subtraction: #set( $value = $bar - 1 )
			</li>
			<li>
						Multiplication: #set( $value = $foo * $bar )
			</li>
			<li>
						Division: #set( $value = $foo / $bar )
			</li>
			<li>
						Remainder: #set( $value = $foo % $bar )
			</li>
	</ul>
					</div>
													<a name="#if/#elseif/#else - Output conditional on truth of statements"></a>
	<h2>#if/#elseif/#else - Output conditional on truth of statements</h2>
	<div class="subsection">
										<p>
    Format:
    </p>
												<p>
    <strong>#</strong> [ <strong>{</strong> ] <strong>if</strong> [ <strong>}</strong> ] <strong>(</strong> [condition] <strong>)</strong> [output] [
    <strong>#</strong> [ <strong>{</strong> ] <strong>elseif</strong> [ <strong>}</strong> ] <strong>( </strong>[condition] <strong>)</strong> [output] ]* [
    <strong>#</strong> [ <strong>{</strong> ] <strong>else</strong> [ <strong>}</strong> ]  [output] ]
    <strong>#</strong> [ <strong>{</strong> ] <strong>end</strong> [ <strong>}</strong> ]
    </p>
												<p>
    Usage:
    </p>
												<ul>
			<li>
											<em>condition</em>
										 - If a boolean, considered true if it has a
    true false; if not a boolean, considered true if not null.
			</li>
			<li>
											<em>output</em>
										 - May contain VTL.
			</li>
	</ul>
												<p>
    Examples (showing different operators):
    </p>
												<table>
                        <tr>
                        <th colspan="" rowspan="">
						Operator Name
			</th>
                                <th colspan="" rowspan="">
						Symbol
			</th>
                                <th colspan="" rowspan="">
						Alternative Symbol
			</th>
                                <th colspan="" rowspan="">
						Example
			</th>
            </tr>
                                <tr>
                        <td colspan="" rowspan="">
						Equals Number
			</td>
                                <td colspan="" rowspan="">
						==
			</td>
                                <td colspan="" rowspan="">
						eq
			</td>
                                <td colspan="" rowspan="">
						 #if( $foo == 42 )
			</td>
            </tr>
                                <tr>
                        <td colspan="" rowspan="">
						Equals String
			</td>
                                <td colspan="" rowspan="">
						==
			</td>
                                <td colspan="" rowspan="">
						eq
			</td>
                                <td colspan="" rowspan="">
						 #if( $foo == "bar" )
			</td>
            </tr>
                                <tr>
                        <td colspan="" rowspan="">
						Object Equivalence
			</td>
                                <td colspan="" rowspan="">
						==
			</td>
                                <td colspan="" rowspan="">
						eq
			</td>
                                <td colspan="" rowspan="">
						 #if( $foo == $bar )
			</td>
            </tr>
                                <tr>
                        <td colspan="" rowspan="">
						Not Equals
			</td>
                                <td colspan="" rowspan="">
						!=
			</td>
                                <td colspan="" rowspan="">
						ne
			</td>
                                <td colspan="" rowspan="">
						 #if( $foo != $bar )
			</td>
            </tr>
                                <tr>
                        <td colspan="" rowspan="">
						Greater Than
			</td>
                                <td colspan="" rowspan="">
						>
			</td>
                                <td colspan="" rowspan="">
						gt
			</td>
                                <td colspan="" rowspan="">
						 #if( $foo > 42 )
			</td>
            </tr>
                                <tr>
                        <td colspan="" rowspan="">
						Less Than
			</td>
                                <td colspan="" rowspan="">
						<
			</td>
                                <td colspan="" rowspan="">
						lt
			</td>
                                <td colspan="" rowspan="">
						 #if( $foo < 42 )
			</td>
            </tr>
                                <tr>
                        <td colspan="" rowspan="">
						Greater Than or Equal To
			</td>
                                <td colspan="" rowspan="">
						>=
			</td>
                                <td colspan="" rowspan="">
						ge
			</td>
                                <td colspan="" rowspan="">
						 #if( $foo >= 42 )
			</td>
            </tr>
                                <tr>
                        <td colspan="" rowspan="">
						Less Than or Equal To
			</td>
                                <td colspan="" rowspan="">
						<=
			</td>
                                <td colspan="" rowspan="">
						le
			</td>
                                <td colspan="" rowspan="">
						 #if( $foo <= 42 )
			</td>
            </tr>
                                <tr>
                        <td colspan="" rowspan="">
						Boolean NOT
			</td>
                                <td colspan="" rowspan="">
						!
			</td>
                                <td colspan="" rowspan="">
						not
			</td>
                                <td colspan="" rowspan="">
						 #if( !$foo )
			</td>
            </tr>
            </table>
												<p>Notes:</p>
												<ol>
			<li>
						
    The == operator can be used to compare numbers, strings, objects of the same class, or objects
    of different classes.  In the last case (when objects are of different classes), the toString()
    method is called on each object and the resulting Strings are compared.
  
			</li>
			<li>
						
   You can also use brackets to delimit directives.  This is especially
    useful when text immediately follows an 
													<code>#else</code>
										 directive.
  
			</li>
	</ol>
												<div class="source">
#if( $foo == $bar)it's true!#{else}it's not!#end&lt;/li&gt;
</pre></div>
					</div>
													<a name="foreach-Loopsthroughalistofobjects"></a>
	<h2>#foreach - Loops through a list of objects</h2>
	<div class="subsection">
										<p>
    Format:
    </p>
												<p>
    <strong>#</strong> [ <strong>{</strong> ] <strong>foreach</strong> [ <strong>}</strong> ] <strong>(</strong> <em>$ref</em> <strong>in</strong> <em>arg</em>
    <strong>)</strong> <em>statement</em>
    <strong>#</strong> [ <strong>{</strong> ] <strong>end</strong> [ <strong>}</strong> ]
    </p>
												<p>
    Usage:
    </p>
												<ul>
			<li>
											<em>$ref</em>
										 - The first variable reference is the item.
			</li>
			<li>
											<em>arg</em>
										 - May be one of the following: a reference to a
        list (i.e. object array, collection, or map), an array list, or
        the range operator.
			</li>
			<li>
						
    
													<em>statement</em>
										 - What is output each time Velocity finds a
    valid item in the list denoted above as 
													<i>arg</i>
										.  This output is
    any valid VTL and is rendered each iteration of the loop.
    
			</li>
	</ul>
												<p>
    Examples of the #foreach(), omitting the statement block :
    </p>
												<ul>
			<li>
						Reference: #foreach ( $item in $items )
			</li>
			<li>
						Array list: #foreach ( $item in ["Not", $my, "fault"] )
			</li>
			<li>
						Range operator: #foreach ( $item in [1..3] )
			</li>
	</ul>
												<p>
    Velocity provides an easy way to get the loop counter so that you
    can do something like the following:
    </p>
												<div class="source">
&lt;table&gt;
#foreach( $customer in $customerList )
    &lt;tr&gt;&lt;td&gt;$velocityCount&lt;/td&gt;&lt;td&gt;$customer.Name&lt;/td&gt;&lt;/tr&gt;
#end
&lt;/table&gt;
</pre></div>
												<p>
    The default name for the loop counter variable reference, which is
    specified in the velocity.properties file, is $velocityCount. By
    default the counter starts at 1, but this can be set to either 0 or
    1 in the <code>velocity.properties</code> file. Here's what the loop
    counter properties section of the <code>velocity.properties</code>
    file appears:
    </p>
												<div class="source">
# Default name of the loop counter
# variable reference.
directive.foreach.counter.name = velocityCount

# Default starting value of the loop
# counter variable reference.
directive.foreach.counter.initial.value = 1
</pre></div>
												<p>
    Additionally, the maximum allowed number of loop iterations can be
    controlled engine-wide (an ability introduced in Velocity 1.5).
    By default, there is no limit:
    </p>
												<div class="source">
# The maximum allowed number of loops.
directive.foreach.maxloops = -1
</pre></div>
					</div>
													<a name="include-Renderslocalfile(s)thatarenotparsedbyVelocity"></a>
	<h2>#include - Renders local file(s) that are not parsed by Velocity</h2>
	<div class="subsection">
										<p>
    Format:
    </p>
												<p>
    <strong>#</strong> [ <strong>{</strong> ] <strong>include</strong> [ <strong>}</strong> ] <strong>( </strong>arg[ arg2  ... argn]<strong> )</strong>
    </p>
												<ul>
			<li>
											<em>arg</em>
										 - Refers to a valid file under TEMPLATE_ROOT.
			</li>
	</ul>
												<p>
    Examples:
    </p>
												<ul>
			<li>
						String: #include( "disclaimer.txt"  "opinion.txt" )
			</li>
			<li>
						Variable: #include( $foo  $bar )
			</li>
	</ul>
					</div>
													<a name="parse-RendersalocaltemplatethatisparsedbyVelocity"></a>
	<h2>#parse - Renders a local template that is parsed by Velocity</h2>
	<div class="subsection">
										<p>
    Format:
    </p>
												<p>
    <strong>#</strong> [ <strong>{</strong> ] <strong>parse</strong> [ <strong>}</strong> ] <strong>(</strong> arg <strong>)</strong>
    </p>
												<ul>
			<li>
											<em>arg</em>
										 - Refers to a template under TEMPLATE_ROOT.
			</li>
	</ul>
												<p>
    Examples:
    </p>
												<ul>
			<li>
						String: #parse( "lecorbusier.vm" )
			</li>
			<li>
						Variable: #parse( $foo )
			</li>
	</ul>
												<p>
    Recursion permitted. See <em>parse_directive.maxdepth</em> in
    <code>velocity.properties</code>
    to change from parse depth. (The default parse depth is 10.)
    </p>
					</div>
													<a name="stop-Stopsthetemplateengine"></a>
	<h2>#stop - Stops the template engine</h2>
	<div class="subsection">
										<p>
    Format:
    </p>
												<p>
    <strong>#</strong> [ <strong>{</strong> ] <strong>stop</strong> [ <strong>}</strong> ]
    </p>
												<p>
    Usage:
    </p>
												<p>
    This will stop execution of the current template. This is good for
    debugging a template.
    </p>
					</div>
													<a name="evaluate"></a>
	<h2>#evaluate - Dynamically evaluates a string or reference</h2>
	<div class="subsection">
										<p>
    Format:
    </p>
												<p>
    <strong>#</strong> [ <strong>{</strong> ] <strong>evaluate</strong> [ <strong>}</strong> ] <strong>( </strong>arg<strong> )</strong>
    </p>
												<ul>
			<li>
											<em>arg</em>
										 - String literal or reference to be dynamically evaluated.
			</li>
	</ul>
												<p>
    Examples:
    </p>
												<ul>
			<li>
						String: #evaluate( 'string with VTL #if(true)will be displayed#end' )
			</li>
			<li>
						Variable: #include( $foo )
			</li>
	</ul>
					</div>
													<a name="define"></a>
	<h2>#define - Assigns a block of VTL to a reference</h2>
	<div class="subsection">
										<p>
    Format:
    </p>
												<p>
    <strong>#</strong> [ <strong>{</strong> ] <strong>define</strong> [ <strong>}</strong> ] <strong>( </strong><em>$ref</em><strong> )</strong>
 <em>statement</em>
    <strong>#</strong> [ <strong>{</strong> ] <strong>end</strong> [ <strong>}</strong> ]

    </p>
												<ul>
			<li>
											<em>$ref</em>
										 - Reference that is assigned the VTL block as a value.
			</li>
			<li>
											<em>statement</em>
										 - Statement that is assigned to the reference.
			</li>
	</ul>
												<p>
    Example:
    </p>
												<ul>
			<li>
						#define( $hello ) Hello $who #end #set( $who = "World!") $hello ## displays Hello World!
			</li>
	</ul>
					</div>
													<a name="macro-AllowsuserstodefineaVelocimacro(VM),arepeatedsegmentofaVTLtemplate,asrequired"></a>
	<h2>#macro - Allows users to define a Velocimacro (VM), a repeated segment of a VTL template, as required</h2>
	<div class="subsection">
										<p>
    Format:
    </p>
												<p>
    <strong>#</strong> [ <strong>{</strong> ] <strong>macro</strong> [ <strong>}</strong> ] <strong>(</strong> vmname $arg1 [ $arg2 $arg3 ... $argn ]
    <strong>)</strong> [ VM VTL code... ] <strong>#</strong> [ <strong>{</strong> ] <strong>#end</strong> [ <strong>}</strong> ]
    </p>
												<ul>
			<li>
											<em>vmname</em>
										 - Name used to call the VM
    (
													<em>#vmname</em>
										)
			</li>
			<li>
											<em>$arg1 $arg2 [ ... ]</em>
										 - Arguments to the VM. There can be
    any number of arguments, but the number used at invocation must
    match the number specified in the definition.
			</li>
			<li>
											<em>[ VM VTL code... ]</em>
										 - Any valid VTL code, anything you
    can put into a template, can be put into a VM.
			</li>
	</ul>
												<p>
    Once defined, the VM is used like any other VTL directive in a
    template.
    </p>
												<div class="source">
#vmname( $arg1 $arg2 )
</pre></div>
												<p>
    VMs can be defined in one of two places:
    </p>
												<ol>
			<li>
											<i>Template library:</i>
										 can be either VMs pre-packaged with
    Velocity or custom-made, user-defined, site-specific VMs;
     available from any template
			</li>
			<li>
											<i>Inline:</i>
										 found in regular templates, only usable when
    
													<em>velocimacro.permissions.allowInline=true</em>
										 in
    
													<code>velocity.properties</code>
										.
			</li>
	</ol>
					</div>
						</div>
												<a name="Comments"></a>
	<h1>Comments</h1>

	<div class="subsection">
														<p>
    Comments are not rendered at runtime.
    </p>
															<a name="SingleLine"></a>
	<h2>Single Line</h2>
	<div class="subsection">
										<p>
    Example:
    </p>
												<p>
    <strong>## This is a comment.</strong>
    </p>
					</div>
													<a name="MultiLine"></a>
	<h2>Multi Line</h2>
	<div class="subsection">
										<p>
    Example:
    </p>
												<p>
    <strong>
    #*<br />
    This is a multiline comment.<br />
    This is the second line<br />
    *#
    </strong>
    </p>
					</div>
						</div>
									</div>

				<div id="footer">
					Copyright &#169; 1999-2007, <a href="http://www.apache.org/">The Apache Software Foundation</a>.
				</div>

			</div>

        </body>
    </html>
<!-- end the processing -->





















