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}&emsp;可用余额&emsp;$!{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等其他类容器方式来包装。

 
 

velocity(vm)模板引擎基本语法的更多相关文章

  1. 前端 velocity(.vm)模板里写ajax出现解析异常

    异常信息:Caused by: org.apache.velocity.exception.ParseErrorException: Encountered "{" at dist ...

  2. nodeJs学习-10 模板引擎 ejs语法案例

    ejs语法案例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

  3. 使用 Velocity 模板引擎快速生成代码(zhuan)

    http://www.ibm.com/developerworks/cn/java/j-lo-velocity1/ ****************************************** ...

  4. 转 如何使用velocity模板引擎开发网站

    基于 Java 的网站开发,很多人都采用 JSP 作为前端网页制作的技术,尤其在是国内.这种技术通常有一些问题,我试想一下我们是怎样开发网站的,通常有几种方法: 1:功能确定后,由美工设计网页的UI( ...

  5. 使用Velocity 模板引擎快速生成代码

    Velocity 模板引擎介绍 在现今的软件开发过程中,软件开发人员将更多的精力投入在了重复的相似劳动中.特别是在如今特别流行的MVC架构模式中,软件各个层次的功能更加独立,同时代码的相似度也更加高. ...

  6. 基于Velocity开发自己的模板引擎

    Velocity是一个基于java的模板引擎(template engine).它同意不论什么人只简单的使用模板语言(template language)来引用由java代码定义的对象. 当Veloc ...

  7. 调研js模板引擎

    js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...

  8. js模板引擎介绍搜集

    js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...

  9. 浅析js模板引擎

    js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...

随机推荐

  1. 《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》论文笔记

    Code Address:https://github.com/junyanz/CycleGAN. Abstract 引出Image Translating的概念(greyscale to color ...

  2. bzoj3389

    3389: [Usaco2004 Dec]Cleaning Shifts安排值班 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 367  Solved: ...

  3. 关于ArcGis for javascrept之FeatureLayer类与GraphicsLayer类

    FeatureLayer: ArcGIS for Server发布的要素服务或者地图服务中的图层 构造方法: myFeatureLayer = new esri.layers.FeatureLayer ...

  4. Codeforces Round #259 (Div. 1)A(公式)

    传送门 题意 给出m个面的骰子扔n次,取最大值,求期望 分析 暴力算会有重复,而且复杂度不对. 考虑m个面扔n次得到m的概率,发现只要减去(m-1)个面扔n次得到m-1的概率即可,给出example说 ...

  5. bzoj 4276: [ONTAK2015]Bajtman i Okrągły Robin【线段树+最大费用最大流】

    --因为T点忘记还要+n所以选小了所以WA了一次 注意!题目中所给的时间是一边闭一边开的区间,所以读进来之后先l++(或者r--也行) 线段树优化建图,很神.(我记得还有个主席树优化建树的?)首先考虑 ...

  6. bzoj 4816: [Sdoi2017]数字表格【莫比乌斯反演+逆元】

    把题意简化,就是要求 \[ \prod_{d=1}^{min(n,m)}f[d]^{\sum_{i=1}^{n}\sum_{j=1}^{m}e[gcd(i,j)==d]} \] 把幂用莫比乌斯反演转化 ...

  7. $Edmonds-Karp$[网络流]

    \(原题戳这里\) >最大流最小割定理$(Maximum Flow, Minimum Cut Theorem): $ 网络的最大流等于最小割 具体的证明分三部分 1.任意一个流都小于等于任意一个 ...

  8. iOS导航栏NavigationBar的颜色,按钮和标题以及字体颜色

    首先,层级关系: leftBarButtonItem.rightBarButtonItem.title都是加在UINavigationItem上的,UINavigationItem再加在Navigat ...

  9. BZOJ2006 超级钢琴

    Description ​ 给定一个长度为n的区间,询问前k大的区间和,区间长度\(\in [L, R]\). $ n, k <= 500000$ Solution ​ 首先求前缀和.把一个区间 ...

  10. Android偏好设置(6)应用和监听各偏好参数

    Reading Preferences By default, all your app's preferences are saved to a file that's accessible fro ...