引入
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
加载
@Test
public void velo01() throws IOException {
// 设置velocity资源加载器
Properties properties = new Properties();
properties.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
// 初始化velocity引擎
Velocity.init(properties);
// 创建velocity容器
VelocityContext velocityContext = new VelocityContext();
velocityContext.put("name", "吕星辰");
// 加载版本文件
Template template = Velocity.getTemplate("vm/velo01.vm", "utf-8");
// 合并数据到模板
FileWriter fileWriter = new FileWriter("E:\\java\\springbootTest1\\src\\main\\resources\\static\\01.html");
template.merge(velocityContext, fileWriter);
// 释放资源
fileWriter.close();
}
用法
1、注释
## 注释
不会被输出
2、非解析内容:也就是不会被解析
3、变量引用
${name} 如果name存在,则输出name值,不存在会原样展示;
$!{name} 如果name存在,则输出name值,不存在则输出空字符串
4、方法调用
注:java所有的方法都可以在模板中使用
${name.trim()} 去掉变量name值的空格,如果name值为空,则原样输出;
$!{name.trim()} 功能同上,但是如果name值为空或方法调用失败,会输出空字符串。
5、指令
流程控制指令:
(1)#set
#set($变量名称=值) 跟js中变量var a=1类似
#set定义的变量可以在下边重复调用:
(2)#if指令
注意最后需要使用#end结束if指令
#if(判断条件)
···
#elseif(判断条件)
···
#else
···
#end
(3)#foreach
#foreach($item in list)
···
#end
$item为遍历的每一项
#break 为退出循环。。。
遍历、循环对象或集合
输出结果:
如果遍历对象,也可以遍历对象的键值对:
补充:
#foreach内置属性:
$foreach.index : 获取遍历的索引,从0开始
$foreach.count : 获取遍历的次数,从1开始
引入资源指令:
(1)#include(类加载路径)
引入的资源不会被解析
#include("/vm/velo01.vm")
示例: velo02.vm中去加载velo01.vm,velo01.vm内容不会被解析。。。。。。。。
(2)#path(类加载路径)
引入的资源将会被velocity引擎被解析
示例:还是在velo02.vm中加载velo01.vm
#path("/vm/velo01.vm")
(3)#define 复用组件
#define($自定义的模块名称)
··· 这里边的内容时要复用的组件(这个组件有可能页面别的在地方重复用到,比如表格、输入框等等) ···
#end
示例:在celo01.vm中定义组件,在下边可重复复用该组件
(4)#evaluate 动态计算,动态计算就是可以把一段字符串当作js代码来执行
示例:
输出如下:
宏指令:
定义重用模块(复用模块,与#define区别:#define不能携带参数)
(1)#macro(自定义的红名称 [args]?)
参数一:宏名称
参数二:携带的参数
调用:
#宏名称(参数)
示例:在velo01.vm中定义宏
传入myUser变量
@Test
public void velo01() throws IOException {
// 设置velocity资源加载器
Properties properties = new Properties();
properties.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
// 初始化引擎
Velocity.init(properties);
// 创建容器
VelocityContext velocityContext = new VelocityContext();
User user = new User();
user.setName("<h1>lxc</h1>");
velocityContext.put("myUser", user);
// 加载版本文件
Template template = Velocity.getTemplate("vm/velo01.vm", "utf-8");
// 合并数据到模板
FileWriter fileWriter = new FileWriter("E:\\java\\springbootTest1\\src\\main\\resources\\static\\01.html");
template.merge(velocityContext, fileWriter);
// 释放资源
fileWriter.close();
}
执行效果如下: