zoukankan      html  css  js  c++  java
  • Velocity 语法详解

    Velocity是基于Java的模板引擎,它允许页面设计者引用Java中定义的方法。页面设计者和Java开发者能够同时使用MVC的模式开发网站,这样网页设计者能够把精力放在页面的设计上,程序员也可以把精力放在代码开发上。Velocity把Java代码从Web页面中分离, 使网站可维护性更强,同时也在Java服务器页面(JSPs)或者PHP中提供了可视化交互的选择。

    Velocity 可以被用在以下场景中:

    1. Web 应用:开发者在不使用 JSP 的情况下,可以用 Velocity 让 HTML 具有动态内容的特性。

    2. 源代码生成:Velocity 可以被用来生成 Java 代码、SQL 或者 PostScript。有很多开源和商业开发的软件是使用 Velocity 来开发的。

    3. 自动 Email:很多软件的用户注册、密码提醒或者报表都是使用 Velocity 来自动生成的。使用 Velocity 可以在文本文件里面生成邮件内容,而不是在 Java 代码中拼接字符串。

    4. 转换 xml:Velocity 提供一个叫 Anakia 的 ant 任务,可以读取 XML 文件并让它能够被 Velocity 模板读取。一个比较普遍的应用是将 xdoc 文档转换成带样式的 HTML 文件。

    一、变量

    1. 变量定义

    velocity 中的变量是弱类型,大小写敏感。

    #set($name="velocity")

    当使用 set 指令时,等号后面引号中的字面字符串将解析和重新解析,例如出现以  开始的字符串时,将做变量的替换。

    #set($hello="hello $name")

    上面的这个等式将会给 $hello 赋值为“hello velocity”

    2. 变量使用

    在模板文件中使用 $name 或者 ${name}  来使用定义的变量。推荐使用 ${name}  这种格式,因为在模板中同时可能定义了类似 $name 和 $names 的两个变量,如果不选用大括号的话,引擎就没有办法正确识别 $names 这个变量。
    对于一个复杂对象类型的变量,例如 $person,可以使用 ${person.name} 来访问 person 的 name 属性。值得注意的是,这里的 ${person.name} 并不是直接访问 person 的 name 属性,而是访问 person 的 getName() 方法,所以 ${person.name} 和${person.getName()} 是一样的。

    3. 变量赋值

    对于 Velocity 来说,变量是弱数据类型的,可以在赋了一个 String 给变量之后再赋一个数字或者数组给它。

    赋值的左边必须是一个变量或者属性引用。

    赋值的右边可以是以下6种类型之一:

    • 变量引用
    • 字面字符串
    • 属性引用
    • 方法引用
    • 字面数字
    • 数组列表
    #set($foo = $bar)
    #set($foo ="hello")
    #set($foo.name = $bar.name)
    #set($foo.name = $bar.getName($arg))
    #set($foo = 123)
    #set($foo = ["foo",$bar])

    注:(1)如果上述例子中右值为 null,则左值不会被赋值,也就是说会保留以前的值。

      (2)Velocity 模板中未被定义的变量将会认为是字符串。例如:

    #set($foo = $bar)
    $foo
    
    输出结果:
    $foo

     二、循环语句

    #set($list=["velocity","freemarker","jsp"])
    
    #foreach($element in $list)
        <p>${velocityCount}. This is ${element}</p>
    #end
    
    输出结果:
    1. This is velocity
    
    2. This is freemarker
    
    3. This is jsp

    Velocity 引擎会将 list 中的值循环赋给 element 变量,同时会创建一个 $velocityCount 的变量作为计数,从 1 开始,每次循环都会加 1。

    另外,Velocity 中还提供了得到循环次数的方法, $velocityCount 变量的名字是 Velocity 默认的名字。

    #foreach($i in [1..3])
        $i
    #end
    
    输出结果:
    1 2 3

    三、条件语句

    #if($condition > 5)
        <p>condition > 5</p>
    #elseif($condition == 5)
        <p>condition = 5</p>
    #else
        <p>condition < 5</p>
    #end
    
    输出结果:
    condition = 5

    四、关系操作符

    Velocity 引擎提供了 AND、OR 和 NOT 操作符,分别对应 && 、|| 和 ! 。

    #set($a=true)
    #set($b=false)
    
    #if($a && $b)
        This is all true.
    #end

    五、宏

    Velocity 中的宏可以理解为函数定义。

    (1)宏的定义:

    #macro(宏的名称 $参数1 $参数2 ...)
        语句体(即函数体)
    #end

    (2)宏的调用:

    #宏的名称($参数1 $参数2 ...)

    注意:参数之间用空格隔开

    (3)示例:

    #macro(func $args1 $args2)
        This is a macro. The argument have ${args1} and ${args2}.
    #end
    
    #func("hello" "world")
    
    输出结果:
    This is a macro. The argument have hello and world.

    六、#parse 与 #include

    #parse#include 指令的功能都是在外部引用文件,而两者的区别是,#parse 会将引用的内容当成类似于源码文件,会将内容在引入的地方进行解析,#include 是将引入文件当成资源文件,会将引入内容原封不动地以文本输出。

    示例:

    foo.vm 文件:

    #set($name="velocity")
    $name

    (1)parse.vm 文件:

    #parse("foo.vm")

    输出结果:

    velocity

    (2)include.vm 文件

    #include("foo.vm")

    输出结果:

    #set($name="velocity") $name

  • 相关阅读:
    Winform编程总结2—常用的XML读写
    SQL点滴4—筛选数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息
    SSIS常用的包—发送Email任务
    SSIS常用的包—FTP任务
    Centos 下同时安装 Mysql4 和 Mysql5,二进制方式
    iptables 学习笔记
    em是否到了退出的时候
    CentOs 5.2设置DVD为本地yum源
    WAMP环境配置
    Silverlight学习笔记:布局之stackpanel
  • 原文地址:https://www.cnblogs.com/Jimc/p/9789655.html
Copyright © 2011-2022 走看看