velocity语法

来源:互联网 发布:php文件管理代码 编辑:程序博客网 时间:2024/05/01 21:31
Velocity是一个基于Java的模板引擎(Template Engine),它允许任何人只需要简单地使用Velocity模板语言(Velocity Template Language,即:VTL)就可以引用由Java代码定义的对象;当Velocity应用于Web开发时,界面设计人员可以和Java程序开发人员同步开发一个遵循MVC架构的Web站点,也就是说,界面设计人员只需要关注界面的显示效果,而Java程序开发人员只需要关注业务逻辑代码,Velocity将Java代码从Web页面中分离出来,以便于维护;
什么是Velocity模版?
Velocity模版可以是任意的文本文件,只要里面包含专门的模板语言(VTL)标记,就可以被Velocity模板引擎解析;
Velocity模版的工作机制:
Velocity可以通过获取Java对象的函数返回值、属性值,用于替换模板文件中的VTL变量标记,从而生成新的文件,模板文件的扩展名可以是".vm"、".htm"、".html"、".asp"、".sql",等等任意后缀;
一、变量
1、定义:
使用#set指令来完成变量的定义和赋值;格式为:
#set (<$变量名> = <"变量值">)
例如:
#set ($name = "Sankhya")  ##字符串
#set ($age = 30)          ##数字
#set ($list = ["Sankara", ${name}, "Shankara"])  ##数组
#set ($dict = ["A":"va", "B":234, "C":${value}]) ##HashTable
在双引号之间的字符串将被Velocity引擎解释和重新解释;
例如:
#set ($desc = "${name} is ${age} years old;")
执行这条语句之后,输出$desc的值将是:Sankhya is 30 years old;
备注:
(1).Velocity模版中的变量是弱类型的;等号"="右边的值可以是引用、字符串、数字、Array、Vector、HashTable或表达式;
(2).如果等号"="右边的值是null,则左边的变量不会被赋值,且仍然保留以前的值;
(3).模板中没有被定义的变量将被认为是一个字符串;
(4).模板引擎不会将reference解释为对象的实例变量;如:$foo.Name将被解释为对象Foo的getName()方法,而不是Foo对象的Name实例变量;$foo.getBar()就等价于$foo.Bar;
2、引用:
引用变量的值时需要在变量名称前加上符号"$";例如: $name
如果是单一的变量,最好还要用大括号"{}"括起来;例如: ${name}
备注:引用对象的属性时,不能加大括号"{}";
3、注释:
(1).单行注释:使用双"#"号开头;例如:
    ##This is a single line comment;
(2).多行注释:使用"#* ...... *#"格式;例如:
    #*
      This is a multi-line comment;
    *#
(3).文档注释:使用"#** ...... **#"格式;例如:
    #**
      This is a VTL comment block and
      may be used to store such information
      as the document author and versioning
      information:
      @version 1.1
      @author  Sankhya
    **#
二、控制语句
1、条件控制:
#if (<condition>)
  ##statement segment
#elseif (<condition>)
  ##statement segment
#else
  ##statement segment
#end
作为condition,Velocity引擎也支持关系运算符(>、>=、<、<=、!=)和逻辑运算符(&&->AND、||->OR、!->NOT);
例如:
##example for AND
#if ($foo && $bar)
  <strong>This is AND operation</strong>
#end
##example for OR
#if ($foo || $bar)
  <strong>This is AND operation</strong>
#end
2、循环控制:
使用#foreach循环指令实现;格式:
#foreach ($element in $list)
  ##your statement
  $velocityCount
#end
例1:
#set ($list = ["abc", "def", "hij"])
#foreach ($element in $list)
  $velocityCount
  This is $element. <br>
#end
每次循环$list中的一个值都会被自动赋值给$element变量;$list可以是一个Vector、HashTable或Array;分配给$element的值是一个Java对象,并且可以通过变量被引用;
例2:
#foreach ($num in [1..9])
  ${num} <br>
#end
备注:Velocity模版中的标示符是大小写敏感的;Velocity还专门提供了一个得到循环次数的方法,那就是通过变量$velocityCount得到,而且$velocityCount是Velocity中的默认名字;
三、宏
Velocity中的宏可以理解为函数;
1、定义:
#macro (<宏的名称> [$参数1] [参数2] ...)
  ##statement segment
#end
2、调用:
#<宏的名称>([<参数1>] [<参数2>] ...)
四、指令
1、#parse和#include指令:
这两者都是导入本地模板文件;
#parse指令只能导入一个文件,同时,被导入的文件的内容将会被Velocity模板引擎解析,意思就是把被导入的文件的内容copy到当前文件中;该指令也可以被递归调用;
#include指令可以导入一个或多个文件,当导入多个文件时,可以用逗号分隔;而且,被导入的文件的内容不会被Velocity模版引擎解析;
例如:
#include ("one.gif", "two.txt", "three.htm") ##不会被模版引擎解释;
#include (${file1}, ${file2}, ${file3})      ##不会被模版引擎解释;
#parse ("server.conf")                       ##会被模版引擎解释;
2、#stop指令:
停止执行模板引擎并返回,把它应用于debug是很有帮助的;
3、转义字符:
Velocity中的转义字符也是使用符号"\";这就意味着执行"\\"将会输出"\",而执行"\$"将会输出"$",执行"\#"会输出"#";
五、内置对象
Velocity引擎内置了一些对象,在模版文件里面可以直接使用;例如:$request、$response、$session,等等;模板内还可以使用$msg对象内的消息工具访问Structs的国际化资源;
0 0
原创粉丝点击