1.什么是Velocity
Velocity是一个基于Java的模板引擎,其提供了一个Context容器,在java代码里面我们可以往容器中存值,然后在vm文件中使用特定的语法获取,这是velocity基本的用法,其与jsp、freemarker并称为三大视图展现技术,相对于jsp而言,velocity对前后端的分离更加彻底:在vm文件中不允许出现java代码,而jsp文件中却可以.
#set($!{name} = "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])
使用$vari获取变量时,如果变量不存在,Velocity引擎会将其原样输出, 通过使用$!{}的形式可以将不存在的变量变成空白输出.
5.velocity循环
#foreach($item in $list)
$item
$velocityCount
#end
$item代表遍历的每一项,elocityCount是Velocity提供的用来记录当前循环次数的计数器,默认从1开始计数,可以在velocity.properties文件中修改其初始值
6.velocity条件控制语句
#if(condition)
...dosonmething...
#elseif(condition)
...dosomething...
#else
...dosomething...
#end
7.velocity宏
## 声明宏
#macro(sayHello $name)
hello $name
#end
## 使用宏
#sayHello("NICK")
8.velocity网页嵌套
在Velocity中可以通过parse或者include指令引入外部vm文件,
二者存在区别:include指令会将外部文件原样输出,而parse指令会先对其进行解析再输出(即对外部文件中的vm语法解析)
#parse("header.vm")
#include("footer.vm")
9.vm文件
vm文件是作为jsp的替代来展示给用户
在vm文件中可以获得在Context域或request等域中存放的值。
默认情况下,会在资源根路径下搜索vm文件,所以直接将vm放在根路径下即可(也可以通过配置velocity.properties指定加载路径)
如下:
#set($greet = "hello")
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<p>$!{greet} $!{fullName}</p>
<p>my another name is $!{anotherName}</p>
</body>
</html>
10.布局母版vm文件
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>${page_title}</title>
#if($!{CSS})
#foreach($_css in ${CSS})
<link type="text/css" rel="stylesheet" href="${ContextPath}/$_css">
#end
#end
</head>
<body>
<div class="header">
#parse("/templates/layout/header.vm")
</div>
<div class="container">
<div class="sub">
#parse($sub)
</div>
<div class="main">
$screen_content
</div>
</div>
#if($!JS)
#foreach($_js in $JS)
<script type="text/javascript" src="${CntextPath}/${_js}">
#end
#end
</body>
</html>
其中,有个特殊的变量 screen_content,这是Velocity内置的变量,代表将要转发的页面