velocity

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脚本基本的语法全的更多相关文章

  1. 模板引擎:Velocity&FreeMarker(转)

    Velocity,名称字面翻译为:速度.速率.迅速,用在Web开发里,用过的人可能不多,大都基本知道和在使用Struts,到底Velocity和Struts(Taglib和Tiles)是如何联系?在技 ...

  2. Velocity模板引擎语法

    Velocity 模板引擎介绍 Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java ...

  3. Velocity脚本新手教程

    从网络下的数据汇编 一.Velocity简介 Velocity它是Apache该公司的开源产品,它是一套基于Java语言模板引擎,背景可以非常灵活的数据与模板文件一起反对.他直言不讳地说:,人使用模板 ...

  4. Volecity模板引擎学习笔记

    转自:https://blog.csdn.net/reggergdsg/article/details/50937433 最近项目中用到了volecity模板,这里做一下笔记,学习中...相比较 Fr ...

  5. Velocity脚本入门教程

    下面资料整理自网络 一.Velocity介绍 Velocity是Apache公司的开源产品,是一套基于Java语言的模板引擎,可以很灵活的将后台数据对象与模板文件结合在一起,说的直白一点,就是允许任何 ...

  6. Javascript模板引擎mustache.js详解

    mustache.js是一个简单强大的Javascript模板引擎,使用它可以简化在js代码中的html编写,压缩后只有9KB,非常值得在项目中使用.本文总结它的使用方法和一些使用心得,内容不算很高深 ...

  7. Js模板引擎mustache

    mustache.js是一个简单强大的Javascript模板引擎,使用它可以简化在js代码中的html编写,压缩后只有9KB,非常值得在项目中使用.本文总结它的使用方法和一些使用心得,内容不算很高深 ...

  8. 模板引擎mustache.js

    Javascript模板引擎mustache.js详解   阅读目录 1. 从一个简单真实的需求讲起 2. mustache的用法 3. mustache的思想 4. {{prop}}标签 5. {{ ...

  9. Spring Boot中使用模板引擎Thymeleaf

    一.Thymeleaf简介 Thymeleaf[taɪm lif],百里香叶,是一个流行的模板引擎,该模板引擎采用Java语言开发.Java中常见的模板引擎有Velocity.Freemaker.Th ...

随机推荐

  1. 面向对象之继承-5种JavaScript继承的方法

    今天我们讨论一下常用的几种继承方法:首先我们创建一个动物函数Animal: function Animal () { this.species = '动物' }再写准备名叫猫咪的函数Cat: func ...

  2. php 静态属性和静态变量

  3. matlab中增加Java VM 的堆空间(解决xml_io_tools出现的OutOfMemory问题)

    今天用MATLAB写程序,调用了xml_io_tools(很赞的一个xml读写工具包)中的函数,但是由于我要书写的文件比较大,5m左右,运行时不知道xml_io_tools中的哪一块超出了java中的 ...

  4. 7CSS之超链接

    <!-- title="这是鼠标悬停时显示的文字" 鼠标悬停时,显示相关的文字--> <a href="#" title="这是鼠标 ...

  5. MySQL数据库的三大范式定义,作用—------你所期待的最佳答案

    第一范式:确保每列的原子性. 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式. 例如:顾客表(姓名.编号.地址.……)其中"地址"列还可 ...

  6. vim之tags

    好长时间没有上来更新了, 今天趁老板不再上来休闲一下. 本章要说的是和vim的tags相关的内容. 之所以在跳转之后就说明tags是因为这个功能相当的重要和实用. 好的东西自然是需要提前分享的. 首先 ...

  7. CentOS7配置VSFTP服务器

    [1] 安装VSFTP [root@localhost ~]# yum -y install vsftpd [2] 配置vsftpd.conf文件 [root@localhost ~]# vi /et ...

  8. ProE复杂曲线方程:Python Matplotlib 版本代码(L系统,吸引子和分形)

    对生长自动机的研究由来已久,并在计算机科学等众多学科中,使用元胞自动机的概念,用于生长模拟.而复杂花纹的生成,则可以通过重写一定的生长规则,使用生成式来模拟自然纹理.当然,很多纹理是由人本身设计的,其 ...

  9. 【sqli-labs】 less54 GET -Challenge -Union -10 queries allowed -Variation1 (GET型 挑战 联合查询 只允许10次查询 变化1)

    尝试的次数只有10次 http://192.168.136.128/sqli-labs-master/Less-54/index.php?id=1' 单引号报错,错误信息没有显示 加注释符页面恢复正常 ...

  10. 解决windows64位系统上安装mysql-python报错

    解决windows64位系统上安装mysql-python报错 2018年03月12日 13:08:24 一个CD包 阅读数:1231    版权声明:本文为博主原创文章,未经博主允许不得转载. ht ...