.
目录
常用方式
velocity三种reference
基本语法
1、 变量
2、循环
3、条件语句
4、语句嵌套
5、注释
6、关系和逻辑操作符
7、velocity中的宏
8、#stop
9、$include和#parse
10、转义字符
11、内置对象
12、数组访问
常用方式
for循环 
#foreach($acc in $!{param.tools})
   #set($count = $count + 1)
    <li custom-data="$!{acc.orgcode}" cube-data="$!{acc.owner}" node-data="$!{acc.balance}">
        <a href="javascript:void(0);">$!{acc.accountName} 可用余额 $!{acc.balance}元</a>
    </li>
  #end
if条件语句
#if(${supportWorkerPay})
#end
form表单提交
<form autocomplete="off" id="pursePayForm" action="/purse/pursePay.htm" method="post">
    <input type="hidden" name="orderId" value="$!{param.orderId}"/>
    <input type="hidden" name="amount" value="$!{param.amount}"/>
    <input type="hidden" name="encryptContent" value="$!{param.encryptContent}"/>
    <input type="hidden" name="encryptPwd" value=""/>
    <input type="hidden" name="validateCode" value=""/>
</form>
$("#pursePayForm").submit();
嵌套vm #parse(parsefoo.vm)
velocity三种reference
     变量:对java对象的一种字符串化表示,返回值调用了java的toString()方法的结果。
     方法:调用的是对象的某个方法,该方法必须是public的,返回值也是toString(),方法的参数也必须为String的。
     属性:除了访问java的类属性外,等价于get..()方法。
 基本符号
     1、“#”来标识velocity的脚本语句。
     2、“$”来标识一个对象(或者变量)。
     3、“{}”用来标识velocity变量。
     4、“!”用来强制把不存在的变量显示为空白。
     5、用双引号还是单引号表示,默认“”,可以在stringliterals.interpolate=false改变默认处理方式
基本语法
1、 变量
    (1) 变量定义
             #($name=”hello”)
             #($templateName = “index.vm”)
             #set($template = “$directoryRoot/$templateName”)
             #template
     (2)变量规范
            ${name},也可以写成$name
             但一般情况下使用${name}
             注意:当引用属性的时候不能加{}
    (3)变量赋值
             $name =”hello”
             左侧:
                     为变量或者属性的引用。
             右侧:
                     变量引用、字面字符串、属性引用、方法引用、字面数字、数组列表。
            #set($monkey = $bill)  ##变量引用
             #set( $monkey.Friend = “monica” ) ## 字符串引用
             #set($monkey.Blame = $spindoctory.weave($web) ## 方法引用
             #set($monkey.Number = 123) ## 数字引用
             #set($monkey.Say = [“Not”,$my,”fault”] ##数组列表
              ps:
                     1、右值是null,则左侧不会被赋值,会保留原来的值。
                     2、velocity 模板中未被定义的将被认为是一个字符串。
                                 #set($foo =”gibbous”)
                                 $moon = $foo
                                 输出结果为$moon=gibbous
                     3、velocity模板中不会解释为对象的实例变量。
                     例如
                         $foo.getBar() 等同于$foo.Bar;
                         $data.getUser(“jon”) 等同于 $data.User(“jon”);
                         data.getRequest().getServerName()等同于$data.Request.ServerName等同于$(data.Request.ServerName)
2、循环
     #foreach($element in $list)
             This is $element
             $velocityCount
     #end
     例如:
      #set($list=[“pine”,”oak”,”maple”])
     #foreach($element in $list)
             $velocityCount
             This is $element.<br>
     #end
     输出结果为:
     
    
     $list 可以为Vector、Hashtable、Array。分配给$element 的值是一个java对象,并且可以通过变量被引用。
     例如
         #foreach($key in $list.keySet)
             Key: $key—>value: $list.get($key) <br>
         #end
     Velocity 还提供了循环次数的方法,$velocityCouont变量的名字是Velocity默认的名字,表示循环到第几次了。
     
     例如
       #foreach($foo in [1,2,3,4,5])
         $foo
     #end
     <br>
     #foreach($bar in [2,1,0,-1,-2])
         $bar
     #end
     <br>
     #set($arr=[0,1])
     #foreach($i in $arr)
         $i
     #end
    输出结果如下:
     
     
3、条件语句
     #if(condition)
     #elseif(condition)
     #else
     #end
     例如:
           #set($arr=[“jiayou”,”jiayou2″,”jiayou3″])
     #foreach($element in $arr )
         #if($velocityCount==1)
             <div>jiayou</div>
             #elseif($velocityCount==2)
             <div>jiayou2</div>
             #else
             <div>jiayou3</div>
         #end
     #end
输出结果:
4、语句嵌套
     #foreach($element in $list)
         #foreach($element in $list)
             this is $element .$velocity <br>inner<br>
         #end
         this is $element.$velocity <br>out<br>
     #end
5、注释
     单行注释:##this is single
     多行注释:#*  ………*#
     文档格式:#**………….*#
6、关系和逻辑操作符
      && == || !
         #if($foo && $bar)
        <strong> This AND that</strong>
         #end
7、velocity中的宏
     Velocity中的宏我们可以理解为函数。
     ①宏的定义
     #macro(宏的名称 $参数1 $参数2 …)
        语句体(即函数体)
     #end
     ②宏的调用
     #宏的名称($参数1 $参数2 …)
        说明:参数之间用空格隔开。
8、#stop
停止执行模板引擎并返回,应用于debug很有帮助。
9、$include和#parse
     #include和#parse的作用都是引入本地文件,为了安全,被进入的文件只能在Template_root目录下。
     这两个引入区别:
     1)#include可以引入多个文件。例如:#include(“one.gif”,”two.txt”,”three.html”)
         #parse只能引入指定的单个对象。例如:#parse(“layout/index.vm”)
     2)#include引入的文件内容不会被velocity模板引擎解析。
          #parse引入的文件内容,将解析其中的velocity并交给模板,相当于把引入的文件内容copy到文件中。
     3)#parse是可以递归调用的。
         例如:
         调用者
         dofoo.vm中代码:
         count down.<br>
         #set($count= 8)
         #parse(parsefoo.vm)
         <br>all done with diao yong parsefoo.vm.
        parsefoo.vm中代码:
         $count
         $set($count = $count – 1)
         #if($count>0)<br>
             #parse(“parsefoo.vm”)  ##自己调用自己
         #else
             <br>递归调用结束
         #end
 输出结果:
     
         
       注:
         使用#parse来嵌套另一个vm页面时,变量共享问题,如:
             a.vm 中嵌套了b.vm
             a.vm中使用了变量$param;
             b.vm里可直接使用$param.
             但其中一个定义了,则使用它自己定义的那个同名变量。
10、转义字符
         当变量被定义的时候,两个\\代表一个\,如果未被定义,则按照原样输出。
         例如:
        
11、内置对象
     velocity内置了一些对象,在vm中可以直接调用。例如
     $request、$response、$session,使用$msg内的消息工具访问struts的国际化资源,达到简便实现国际化方法。
12、数组访问
数组要改成list等其他类容器方式来包装。



