1.Velocity模板引擎
1.1.简介
Velocity是一个基于Java的
模板引擎框架,提供的模板语言可以使用在Java中定义的对象和变量上。Velocity是Apache基金会的项目,开发的目标是分离MVC模式中的持久化层和业务层。
1.2.使用场景
开发Velocity的目标是分离 MVC 模式中的持久化层和业务层。但是在实际应用过程中,Velocity 不仅仅被用在了 MVC 的架构中,还可以被用在以下一些场景中:
Web应用
:开发者在不使用JSP的情况下,可以用Velocity让HTML具有动态内容的特性
源代码生成
:Velocity可以被用来生成Java代码
、SQL或者PostScript,有很多开源和商业开发的软件是使用Velocity来开发的自动Email
:很多软件的用户注册、密码提醒或者报表都是使用Velocity来自动生成的,使用Velocity可以在文本文件里面生成邮件内容,而不是在Java代码中拼接字符串
转换XML
:Velocity提供一个叫Anakia的ant任务,可以读取XML文件并让它能够被Velocity 模板读取。一个比较普遍的应用是将xdoc文档转换成带样式的HTML文件
2.基本语法
2.1.注释
- 单行:## 句子
- 多行:#* 句子句子 *#
- 文档格式:#** 句子句子 **#
2.2.变量定义
#set($name =“velocity”)
等号后面的字符串Velocity引擎将重新解析,例如出现以$开始的字符串时,将做变量的替换
#set($hello =“hello $name”)
上面的等式会给$hello赋值为“hello velocity”
2.3.变量的使用(两种)
1.${name}:推荐
2.$name
- 因为在模板中同时可能定义了类似$name和$names 的两个变量,如果不选用大括号的话,引擎就没有办法正确识别$names 这个变量
- 对于一个复杂对象类型的变量,例如$person,可以使用${person.name}来访问person的name属性。值得注意的是,这里的${person.name}并不是直接访问person的name属性,而是访问person的getName()方法,所以${person.name}和${person.getName()}是一样的
变量的作用域是从上而下,赋值后都会有
,比如:
A $monkey
<div class="list">
<div class="item">
<div class="inner-title">
#set( $monkey = "jerry" )
<span class="color_bg point"></span>保障额度高
B $monkey
</div>
<div class="inner-list">
<p>年度基础免赔额:<span class="color bold">1万元</span> </p>
</div>
C $monkey
</div>
<div class="item">
D $monkey
<div class="inner-title">
<span class="color_bg point"></span>住院医疗金
</div>
<div class="inner-list">
<p>重症监护费用:不设单项最高年限额</p>
</div>
</div>
E $monkey
</div>
## 以上ABCDE的输出结果是
## 输出结果: 除了A是字符串显示$monkey , 其余的都是:jerry
2.4.变量赋值
定义一个变量,同时给这个变量赋了值。对于Velocity来说,变量是弱数据类型
的,可以在赋了一个String给变量之后再赋一个数字或者数组给它
。可以将以下六种数据类型赋给一个Velocity变量:
- 变量引用:#set($foo = $bar)
- 字面字符串:#set($foo =“hello”)
- 属性引用:#set($foo.name = $bar.name)
- 方法引用:#set($foo.name =$bar.getName($arg))
- 字面数字:#set($foo = 123)
- 数组列表:#set($foo = [“foo”,$bar])
2.5.循环
在Velocity中循环语句的语法如下:
#foreach($element in $list)
This is $element
$velocityCount
#end
Velocity引擎会将list中的值循环赋给element变量,同时会创建一个$velocityCount的变量作为计数,从1开始,每次循环都会加1
#foreach ($item in $list)
$foreach.index ## 自带方法 : 计数从0开始 相当于index
$foreach.hasNext ## 自带方法 : 等于false代表是最后一个
$foreach.count ## 自带方法 : 计数 从1开始 相对于$velocityCount
$foreach.first ## 自带方法 : 是否是第一个
$foreach.last ## 自带方法 : 是否是最后一个
#if( $foreach.count > 3 )
#break ## 使用 #break指令在任何时候停止循环
#end
$velocityCount ## 计数 从1开始
This is $item</br>
#end
## 输出: 1 this is a
实例:
## 数据格式
$datas的值:
{
{“key123":{"bonus":"1","name":"aa"}},
{"key124”:{"bonus”:"2","name":”bb"}}
}
$yanShi的值:
{
{“key123":{"title":"特殊门诊医疗金","values":[600000,600000,600000]}},
{"key124”:{"title”:”住院医疗金","values”:[100000,200000,600000]}}
}
## 方法一:
#foreach ( $key in $datas.keySet())
Key: $key -> Value: $datas.get($key)
#end
## 输出:Key:key123 -> Value: {"bonus":"1","name":"aa"}
## 方法二:
#foreach ( $key in $bonus_datas.entrySet())
Key: $key.getKey() -> Value: $key.getValue()
$yanShi.getJSONObject($key.getKey()).get(“title”)
## 例如循环datas里面再对应去读yanShi的title
#end
## 输出:Key:key123 -> Value: {"bonus":"1","name":"aa"}
读取不同数据的方法:
- .get()
- .getString()
- .getJSONArray()
- .getJSONObject()
- .getBooleanValue()
2.6.条件语句
条件语句的语法如下
#if (condition)
...
#elseif (condition)
...
#else
...
#end
2.7.关系逻辑符
Velocity 引擎提供了 AND、OR 和 NOT 操作符,分别对应&&、||和!
#if($foo && $bar)
#end
2.8.宏
Velocity中的宏可以理解为函数定义,语法如下:
#macro(macroName arg1 arg2 …)
...
#end
调用这个宏的语法是:
#macroName(arg1 arg2 …)
这里的参数之间使用空格隔开
,使用实例如下:
#macro(sayHello $name)
hello $name
#end
#sayHello(“velocity”)
输出的结果为 hello velocity
2.9.#parse 和 #include
#parse和#include指令的功能都是在外部引用文件
,而两者的区别是:
- #parse会将引用的内容当成
类似于源码文件
,会将内容在引入的地方进行解析
- #include是将引入文件当成
资源文件
,会将引入内容原封不动地以文本输出
实例:
foo.vm文件:
#set($name =“velocity”)
parse.vm:
#parse(“foo.vm”)
## 输出为:velocity
include.vm:
#include(“foo.vm”)
## 输出为:#set($name =“velocity”)
来源:CSDN
作者:LiLiLiLaLa
链接:https://blog.csdn.net/LiLiLiLaLa/article/details/103959559