zoukankan      html  css  js  c++  java
  • velocity(vm)模板引擎基本语法

    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等其他类容器方式来包装。


     
     
  • 相关阅读:
    opencv 基本使用
    opencv 无法使用 dll 动态链接库 UnsatisfiedLinkError java.library.path Can't find dependent libraries
    System.load(String filename)和System.loadLibrary(String libname)的区别
    easyui-combox(tagbox) 多选操作 显示为tagbox
    form表单下的button按钮会自动提交表单的问题
    深夜一次数据库执行SQL思考(怎么看执行报错信息)
    Spring Boot 使用Java代码创建Bean并注册到Spring中
    maven 打jar 被引用后 出现 cannot resolve symbol 错误 生成jar包形式代码文件组织格式 非springboot文件组织格式
    Spring 自动转配类 在类中使用@Bean 注解进行转配但是需要排除该类说明
    EasyUI datagrid columns 中 field 区分大小写
  • 原文地址:https://www.cnblogs.com/shuihanxiao/p/9895066.html
Copyright © 2011-2022 走看看